2012-10-27 38 views
0

我创建了一个名为NumericPicker的类,它是在一个对话框中创建的。但它可以在任何Activity中使用,所以我不想在类中使用任何类型的Object或Dataset。 问题是我需要在Activity中有一种方法来知道Dialog何时关闭,这样我就可以保存我需要的值(如startActivityForResult())。我想我可以将Class扩展为Activity并将Theme设置为Dialog,但这不是主意,Class不应该扩展Activity。结果的开始对话框

任何建议要做到这一点?

回答

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

.... 

}; 
+0

你明白我的意思了nted。这明确地工作。谢谢! –