我有一个活动,可能会显示一些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最佳做法是什么?
答案 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(){}
}