0

我创建了一个名为 NumericPicker 的类,它是在对话框中创建的。但它可以在任何活动中使用,所以我不想在类中使用任何类型的对象或数据集。问题是我需要在活动中知道对话框何时关闭,以便我可以保存我需要的值(如startActivityForResult())。我想我可以将 Class 扩展为 Activity 并将 Theme 设置为 Dialog,但这不是想法,Class 不应该扩展 Activity。

有什么建议吗?

4

1 回答 1

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

....

};
于 2012-10-28T02:44:24.493 回答