我对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;
...
梅德谢谢,我已经有这个想法各地播放,但不能让他们的工作。我无法弄清楚如何将内部类连接到对话框。例如 '私有类DialogListener实现TestDialog.DialogListener { \t @覆盖 公共无效onDialogPositiveClick(DialogFragment对话框){ \t \t //代码 } }' – Mateus 2014-10-27 11:53:01
让你的内部类的公共 – Dmitry 2014-10-27 12:47:14
OK我使课堂公众也延长Activity(否则我看不到如何传递'.getFragmentManager()')。但事情开始变得更加混乱,因为我得到的错误告诉我这个活动已经被破坏了。我开始认为这属于我的理解。看起来很难用侦听器显示多个自定义对话框。 – Mateus 2014-10-27 15:15:34