-1

ColorPickerDialog http://www.yougli.net/android/a-photoshop-like-color-picker-for-your-android-application/に問題があります

この ColorPickerDialog には内部静的クラスがあります... この内部静的クラスでは、ColorPickerDialog で「close()」または「dismiss()」を使用して閉じる必要があります...

私の問題は public class ColorPickerDialog extends Dialog

Dialog では、close() メソッドと Dismiss() メソッドは静的ではありません。内部静的クラスでこのメソッドを使用するにはどうすればよいprivate static class ColorPickerView extends Viewですか?

編集...コードの重要なセクションは次のとおりです..

public class ColorPickerDialog extends Dialog {

public interface OnColorChangedListener {
    void colorChanged(String key, int color);
}

private static class ColorPickerView extends View {
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (x > 266 && x < 394 && y > 316 && y < 356){
            savedDialog();
        }
        return true;
    }

    private void savedDialog() {
        new AlertDialog.Builder(getContext())
        .setTitle("Save to profile?")
        .setPositiveButton("Yes",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                            int which) {
                    }
                })
        .setNegativeButton("No",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                            int which) {
                    }
                }).show();

    }
}

public ColorPickerDialog(Context context, OnColorChangedListener listener,
        String key, int initialColor, int defaultColor) {
    super(context);

    mListener = listener;
    mKey = key;
    mInitialColor = initialColor;
    mDefaultColor = defaultColor;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    OnColorChangedListener l = new OnColorChangedListener() {
        public void colorChanged(String key, int color) {
            mListener.colorChanged(mKey, color);
            dismiss();
        }
    };

    setContentView(new ColorPickerView(getContext(), l, mInitialColor,
            mDefaultColor));
    setTitle(R.string.pick_a_color);

}
}

ここで、ColorPickerDialog を開始します...

public class LampsFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            OnColorChangedListener listener = new OnColorChangedListener() {

                @Override
                public void colorChanged(String key, int color) {


                }
            };
            ColorPickerDialog cp = new ColorPickerDialog(getActivity(), listener, key, arg2, arg2);
            cp.show();
            return false;
        }
    });

    lv.setAdapter(files);

    return view;
}

}

内部静的クラスの AlertDialog で「YES」を押した後、ColorPickerDialog を閉じたいです。

4

1 に答える 1

1

ColorPickerDialogどうにかして のインスタンスを取得できない限り、できません。static内部クラスの修飾子は厳密に必要ですか? static 内部クラスは、周囲のクラスのインスタンスにアクセスできません。ColorPickerViewメンバー クラス (非静的内部クラス) を作成するか、周囲のクラスへの参照を (コンストラクターまたはセッター メソッド呼び出しを介して) 渡すことができます。

メンバー クラスは周囲のインスタンスへの暗黙的な参照を持ち、周囲のクラスのメソッドを直接呼び出すことができます。名隠しがあると・・・ 例のために。ColorPickerViewもメソッドを宣言すると仮定するclose()と、外部クラスのメソッドを で呼び出すことができますColorPickerDialog.this.close()

于 2013-05-18T12:46:45.440 に答える