Asynctask android

时间:2011-01-24 11:39:52

标签: android progressdialog

我有一个包含多个活动的标签组。在其中一个选项卡中,我有两个活动,我想在其中放置一个进度对话框。为此,我使用的是Asynk Task。以下是我的AsynkTask类,我为AboutUs活动创建了一个内部类:

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;
        }
    });
}  

然而,这并没有开始新的活动,即部门。进度对话框出现然后消失,但活动从未加载 有什么建议..??

2 个答案:

答案 0 :(得分:1)

首先,您无法从非GUI线程(Async doInBackground()是)启动活动。只需直接在Button.onClick()(为什么使用onTouch?)监听器内部启动。

如果要尽快为新Activity显示ProgressDialog,则需要在new(子)Activity onCreate()中创建它,因为ProgressDialog已连接到新的(子)活动(是它?)。注意创建布局的顺序(在调用setContentView()之后创建ProgressDialog )。 我不太清楚为什么要显示ProgressDialog。是否存在延迟childActivity显示的内容?你加载一些数据?然后,对话框应与该加载任务相关(我猜是异步)。

答案 1 :(得分: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);

    }
}  

感谢你的建议奥利弗:)