2011-01-24 4 views
0

У меня есть табуляция, имеющая несколько видов деятельности. На одной из вкладок у меня есть два действия, между которыми я хочу поместить диалог прогресса. Для этого я использую Asynk Task. Ниже мой AsynkTask класс, который я сделал внутренний класс для деятельности ABOUTUS:Asynk task android

private class TheTask extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected void onPreExecute() { 
     progDialog = ProgressDialog.show(AboutUs.this.getParent(), "Loading... ", 
       "please wait....", true); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     final Intent aboutusIntent = new Intent(getParent(), Departments.class); 
     final TabGroupActivity parentActivity = (TabGroupActivity)getParent(); 
     parentActivity.startChildActivity("Departments", aboutusIntent); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     if(progDialog.isShowing()) 
     { 
     progDialog.dismiss(); 
     } 
    } 
} 

Я называю этот класс в моей ABOUTUS деятельности:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.aboutus); 
     . 
     . 
     . 
     . 
/* Button for going to Departments */ 
    Button ourdepbtn = (Button) findViewById(R.id.departmentsbutton); 
    ourdepbtn.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      //ourDepartments(); 
      new TheTask().execute(); 
      return false; 
     } 
    }); 
} 

Однако это does'nt начать новую деятельность т.е. Отделы. Появится диалоговое окно прогресса, а затем исчезнет, ​​но активность никогда не загружается.
Любые предложения .. ??

ответ

1

Во-первых, вы не можете запускать деятельность из потока без GUI (который Async doInBackground() есть). Просто запустите прямо в своем Button.onClick() (почему вы используете onTouch?) Прослушиватель.

Если вы хотите как можно скорее отобразить ProgressDialog для новой активности, вам необходимо создать его в новой (дочерней) Activity onCreate(), так как ваш ProgressDialog подключен к новой (дочерней) активности (это?). Позаботьтесь о порядке создания макетов (создайте ProgressDialog после, вызывающего setContentView()). Я не очень уверен, почему вы хотите показать, что ProgressDialog. Есть ли что-то, что задерживает отображение childActivity? Вы загружаете некоторые данные? Затем диалог должен быть связан с этой задачей загрузки (как я понимаю, Async).

+0

В моей ABOUTUS деятельности я загрузить некоторые данные, которые приходя из веб-службы. Но как вы думаете, в работе AboutUs должен быть создан диалог прогресса. Поскольку в соответствии с вами, если в дочерней активности создан диалог выполнения, и это тоже после setContentView(), тогда диалоговое окно появится после того, как макет был уложен, что, возможно, портит цель отображения диалога в фоновом режиме. – Nitish

+0

У вас есть 2 варианта: 1) загружать данные и показывать прогресс в новой активности, 2) загружать данные и показывать прогресс в OLD-активности и передавать их в качестве дополнения к намерению (к которому можно напрямую получить доступ к новому действию) – Oliver

+0

Got это правильно. Это код. Он отлично работает :) – Nitish

1

частный класс TheTask расширяет AsyncTask {

Context con; 
    Intent aboutusIntent; 
    TabGroupActivity parentActivity; 
    private TheTask(Context context) 
    { 
     this.con=context; 
    } 

    @Override 
    protected void onPreExecute() { 
     progDialog = ProgressDialog.show(con, "Loading... ", 
       "please wait....", true); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     aboutusIntent = new Intent(con, Departments.class); 
      parentActivity = (TabGroupActivity)getParent(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     if(progDialog.isShowing()) 
     { 
     progDialog.dismiss(); 
     } 
     parentActivity.startChildActivity("Departments", aboutusIntent); 

    } 
} 

Спасибо за ваши предложения Oliver :)

 Смежные вопросы

  • Нет связанных вопросов^_^