我创建了一个名为 NumericPicker 的类,它是在对话框中创建的。但它可以在任何活动中使用,所以我不想在类中使用任何类型的对象或数据集。问题是我需要在活动中知道对话框何时关闭,以便我可以保存我需要的值(如startActivityForResult()
)。我想我可以将 Class 扩展为 Activity 并将 Theme 设置为 Dialog,但这不是想法,Class 不应该扩展 Activity。
有什么建议吗?
我创建了一个名为 NumericPicker 的类,它是在对话框中创建的。但它可以在任何活动中使用,所以我不想在类中使用任何类型的对象或数据集。问题是我需要在活动中知道对话框何时关闭,以便我可以保存我需要的值(如startActivityForResult()
)。我想我可以将 Class 扩展为 Activity 并将 Theme 设置为 Dialog,但这不是想法,Class 不应该扩展 Activity。
有什么建议吗?
实现你自己的监听器/回调。例如,创建一个 onCloseListener 接口。您的活动将实现接口,对话框实现一个setOnCloseListener
方法。创建对话框时,您将活动分配为 onCloseListener,当对话框关闭时,它会调用活动中实现的接口方法。
下面是在一个名为 DrawView 的自定义视图中声明的侦听器接口和实现的示例:
public interface OnUndoEventListener {
public abstract void onUndoEvent();
}
ListenerInfo getListenerInfo() {
if (mListenerInfo != null) {
return mListenerInfo;
}
mListenerInfo = new ListenerInfo();
return mListenerInfo;
}
public void setOnUndoEventListener(OnUndoEventListener l) {
getListenerInfo().mOnUndoEventListener = l;
}
static class ListenerInfo {
private OnUndoEventListener mOnUndoEventListener;
}
ListenerInfo mListenerInfo;
这是一个活动的实现声明和设置监听器:
public class MyActivity extends Activity implements DrawView.OnUndoEventListener {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mDrawView = new DrawView(this, ...);
mDrawView.setOnUndoEventListener(this);
...
};
@Override
public void onUndoEvent() {
...
}
...
}
在 DrawView 中调用回调:
private void someMethod(){
if (getListenerInfo().mOnUndoEventListener != null)
getListenerInfo().mOnUndoEventListener.onUndoEvent();
....
};