实现多个对话框侦听器的Activity?

时间:2014-10-27 11:34:05

标签: java android dialog

我对Android中的对话框感到困惑,需要一些建议。

一切都进展顺利。我在通过Navi Drawer打开的MainActivity中创建了许多对话框。使用如下代码创建的对话框非常简单:

private void exportDialog() {
    LayoutInflater inflater = this.getLayoutInflater();
    final View formElementsView = inflater.inflate(R.layout.export_data, null, false);
    AlertDialog msgBox = new AlertDialog.Builder(this)
            .setView(formElementsView).setTitle("Export Responses")
            .setIcon(android.R.drawable.ic_menu_share)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // Code...
                }
            })
            .create();
    msgBox.show();
}

但是当设备从锁定屏幕恢复时,我开始注意到问题。切换/暂停/恢复工作正常,但锁定的屏幕似乎杀死了活动上下文,当应用程序恢复时,对话框变得图形损坏,我在日志中收到“活动已泄漏窗口”错误消息。

所以,我又开始了。我将所有对话框移动到DialogFragment类中,这似乎是“正确”的方法。这消除了错误和图形故障。大!

但我无法弄清楚如何向MainActivity添加多个对话框侦听器。所以我得到了:

public class MainActivity extends Activity implements LogInDialog.NoticeDialogListener{

但我可以添加更多吗?

在我弄清楚如何做到这一点之前,我已经改变了许多MainActivity方法并将它们移动到相关的对话框类中,这些方法很好但似乎是一种相当线性的方法。如果MainActivity可以对每个对话框响应起作用,那就太好了。

正如你猜测的那样,我不是一个专业的开发人员,所以我很失落!

更新

好的,似乎是原始问题的图形故障和"泄漏的窗口"消息是因为对话框没有被正确解雇。添加以下内容似乎大大改善了问题:

@Override
public void onDestroy() {
     super.onDestroy();
     if (DialogBox1!=null){
         DialogBox1.dismiss();
     }
     DialogBox1= null;
     if (DialogBox2!=null){
         DialogBox2.dismiss();
     }
     DialogBox2= null;
     if (DialogBox3!=null){
         DialogBox3.dismiss();
     }
     DialogBox3= null;
     ...

1 个答案:

答案 0 :(得分:0)

使用实现LogInDialog.NoticeDialogListener

的内部类