我有一个包含多个活动的标签组。在其中一个选项卡中,我有两个活动,我想在其中放置一个进度对话框。为此,我使用的是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;
}
});
}
然而,这并没有开始新的活动,即部门。进度对话框出现然后消失,但活动从未加载 有什么建议..??
答案 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);
}
}
感谢你的建议奥利弗:)