android - 如何在活动完成后显示对话框

时间:2012-06-21 16:55:54

标签: android

假设我们有两个活动,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完成后显示一个对话框。

感谢您提供的任何帮助。

3 个答案:

答案 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()。