2

我有一个可能会显示一些 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;
}

此代码工作正常,直到活动以某种方式被破坏,但对话框仍然打开。由于 onProgressMarkSelected 为空,程序将因 NullPointerException 而崩溃。

我可以用

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

并在活动中实现接口。但是如果我的 DialogFragment 很少,这意味着我应该在 Activity 中实现很少的接口,并且代码会非常混乱。这种情况下的 Android 最佳实践是什么?

4

2 回答 2

0

在我看来,最好的方法是坚持标准的正/负按钮并附加DialogInterface.OnClickListenerhttp://developer.android.com/reference/android/app/DialogFragment.html所示

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

于 2013-08-26T10:58:50.307 回答
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(){}
}
于 2013-08-27T10:21:21.627 回答