2014-10-27 93 views
0

我对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可以对每个对话响应起作用,那将会很好。

正如你所猜测的,我不是一个专业的开发者,所以我变得相当迷茫!

UPDATE:

OK,似乎图形毛刺和“泄露窗口”消息问题是因为对话框没有被正确地驳回。添加下面似乎有很大的改善事项:

@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; 
    ... 

回答

0

使用内部类实现LogInDialog.NoticeDialogListener

+0

梅德谢谢,我已经有这个想法各地播放,但不能让他们的工作。我无法弄清楚如何将内部类连接到对话框。例如 '私有类DialogListener实现TestDialog.DialogListener { \t @覆盖 公共无效onDialogPositiveClick(DialogFragment对话框){ \t \t //代码 } }' – Mateus 2014-10-27 11:53:01

+0

让你的内部类的公共 – Dmitry 2014-10-27 12:47:14

+0

OK我使课堂公众也延长Activity(否则我看不到如何传递'.getFragmentManager()')。但事情开始变得更加混乱,因为我得到的错误告诉我这个活动已经被破坏了。我开始认为这属于我的理解。看起来很难用侦听器显示多个自定义对话框。 – Mateus 2014-10-27 15:15:34