0

我有一个有多个活动的标签组。在其中一个选项卡中,我有两个活动,我想在它们之间放置一个进度对话框。为此,我正在使用 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;
        }
    });
}  

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

4

2 回答 2

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

    }
}  

感谢您的建议奥利弗 :)

于 2011-01-24T12:45:49.807 回答
1

首先,您不能从非 GUI 线程(Async doInBackground() 是)启动活动。直接在你的 Button.onClick() 中开始(为什么你使用 onTouch?)监听器。

如果您想尽快为新的 Activity 显示 ProgressDialog,则需要在新的(子)Activity onCreate() 中创建它,因为您的 ProgressDialog 已连接到新的(子)Activity(是吗?) . 注意创建布局的顺序(调用 setContentView()后创建 ProgressDialog)。我不太确定您为什么要显示该 ProgressDialog。有什么东西会延迟 childActivity 的显示吗?你加载一些数据?然后,对话框应该与加载任务相关(我猜是异步的)。

于 2011-01-24T11:57:52.563 回答