假设我们有两个活动,Activity1和Activity2。
在Activity1的onClick()方法中,如果按下某个按钮,我们会调用启动Activity 2:
Intent myIntent = new Intent(Activity1.this, Activity2.class);
Activity1.this.startActivity(myIntent);
在Activity2中调用finish()之后,恢复了Activity1,我需要一个对话框,一旦恢复就在Activity1中显示。
之前,我只是在Activity1的onClick()方法的同一块中调用showDialog(id):
public void onClick(View v) {
if(v == addHole){
//...
Intent myIntent = new Intent(Activity1.this, Activity2.class);
Activity1.this.startActivity(myIntent);
showDialog(END_DIALOG_ID);
}
}
问题是,在Activity1恢复后,对应于END_DIALOG_ID的对话框不可见,但屏幕变暗且无响应(就像对话框一样),直到按下后退键。
我已经尝试将showDialog()调用放在Activity1的onResume()和onRestart()方法中,但这些都会使程序崩溃。
我还尝试在Activity2中创建一个AsyncTask方法,并在其onPostExecute()中调用showDialog(),但该对话框在Activity2中不可见。
private class ShowDialogTask extends AsyncTask<Void, Void, Integer> {
/** The system calls this to perform work in a worker thread and
* delivers it the parameters given to AsyncTask.execute() */
protected Integer doInBackground(Void... id) {
//do nothing
return END_DIALOG_ID;
}
/** The system calls this to perform work in the UI thread and delivers
* the result from doInBackground() */
protected void onPostExecute(Integer id) {
super.onPostExecute(id);
showDialog(id);
}
}
我现在正试图通过调用
来实现这一点Activity1.this.startActivityForResult(myIntent, END_DIALOG_REQUEST);
使用Activity1中相应的setResult()和onActivityResult()方法,但似乎应该有更好的实现方法。我只需要在Activity2完成后显示一个对话框。
感谢您提供的任何帮助。
答案 0 :(得分:8)
按照建议,在启动startActivityForResult
时致电Activity2
。然后,覆盖onActivityResult
并检查RESULT_OK
,然后显示您的对话框。做你想做的事情是完全可以接受的做法。
答案 1 :(得分:0)
您可以使用onResume方法(如果您没有从activity2中查找任何内容)
@Override
public void onResume(){
super.onResume();
//do something
}
答案 2 :(得分:0)
我必须返回根活动 - MainActivity,可能关闭几个活动,然后显示对话框。所以我选择了替代方式。
MyDialog {
public static synchronized void planToShowDialog(String info) {
if (info != null) {
saveInfoToPreferences(info);
}
}
public static synchronized void showDialogIfNecessary(Context context) {
String info = readInfoFromPreferences();
if (info != null) {
saveInfoToPreferences(null); // Show dialog once for given info.
new MyDialog(context, info).show();
}
}
private static String readInfoFromPreferences() {
//...
}
private static void saveInfoToPreferences(String info) {
//...
}
}
我从MainActivity.onPostResume()方法调用MyDialog.showDialogIfNecessary()。