在销毁和重新创建活动之后处理重新创建的对话框片段的最佳方法

时间:2013-08-26 08:28:25

标签: android android-activity android-dialogfragment

我有一个活动,可能会显示一些DialogFragments。此活动需要从对话框中获取响应。 我用一个听众。在活动中:

ProgressMarkDialog dialog = new ProgressMarkDialog();
dialog.setOnProgressMarkSelected(new ProgressMarkDialog.OnProgressMarkSelected() {
    @Override
    public void onSelect(final int a) {
    //some code..
        }
});

在对话框中:

public void setOnProgressMarkSelected(OnProgressMarkSelected onProgressMarkSelected) {
    this.onProgressMarkSelected = onProgressMarkSelected;
}

此代码工作正常,直到活动被销毁,但对话框仍然打开。程序将因NullPointerException而崩溃,因为onProgressMarkSelected为null。

我可以用

@Override
public void onAttach(final Activity activity) {
    super.onAttach(activity);
    onProgressMarkSelected = (OnProgressMarkSelected) activity;
}

并在activity中实现接口。 但是如果我有很少的DialogFragments,这意味着我应该在活动中实现很少的接口,代码将非常混乱。 这个案例的Android最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

在我看来,最好的方法是坚持使用标准的正/负按钮并附加DialogInterface.OnClickListener <{1}},如http://developer.android.com/reference/android/app/DialogFragment.html

所示

以这种方式看待:标准Android用户希望在对话框中看到正面和/或负面按钮。活动 - 如果需要 - 应该只被告知对话框的结果(正面,负面输入数据)。任何其他输入验证都应在DialogFragment

内处理

答案 1 :(得分:0)

您可以使用继承接口。因为在接口上可以进行多重继承:

public interface A(){
    void doA();
}

public interface B(){
    void doB();
}

public interface BundleAB extends A, B {
    void justAnotherMethod();
}

有了这个,您可以捆绑您的接口并使用它:

public class MyClass implements BundleAB {
    @Override
    public void doA(){}

    @Override
    public void doB(){}

    @Override
    public void justAnotherMethod(){}
}