我创建了一个名为NumericPicker的类,它在Dialog中创建。但它可以在任何Activity中使用,因此我不想在Class中使用任何类型的Object或Dataset。
问题是我需要在Activity中知道Dialog何时关闭,以便我可以保存我需要的值(如startActivityForResult()
)。我想我可以将Class扩展为Activity并将Theme设置为Dialog,但这不是主意,Class不应该扩展Activity。
有任何建议要这样做吗?
答案 0 :(得分:3)
实现自己的侦听器/回调。例如,创建一个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();
....
};