0

ダイアログで作成されるNumericPickerという名前のクラスを作成しました。ただし、どのアクティビティでも使用できるため、クラスでどのタイプのオブジェクトやデータセットも使用したくありません。問題は、必要な値(のようにstartActivityForResult())を保存できるように、ダイアログがいつ閉じられるかを知る方法をアクティビティに含める必要があることです。クラスをアクティビティに拡張し、テーマをダイアログに設定することはできると思いますが、それは考えではありません。クラスはアクティビティを拡張するべきではありません。

これを行うための提案はありますか?

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 に答える