启动结果对话框

时间:2012-10-27 23:44:39

标签: android

我创建了一个名为NumericPicker的类,它在Dialog中创建。但它可以在任何Activity中使用,因此我不想在Class中使用任何类型的Object或Dataset。 问题是我需要在Activity中知道Dialog何时关闭,以便我可以保存我需要的值(如startActivityForResult())。我想我可以将Class扩展为Activity并将Theme设置为Dialog,但这不是主意,Class不应该扩展Activity。

有任何建议要这样做吗?

1 个答案:

答案 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();

....

};