我遇到ColorPickerDialog http://www.yougli.net/android/a-photoshop-like-color-picker-for-your-android-application/
的问题这个ColorPickerDialog有一个内部静态类...... 在这个内部静态类中,我需要在ColorPickerDialog上使用“close()”或“dismiss()”来关闭它......
我的问题是
public class ColorPickerDialog extends Dialog
close()和dismiss()方法在Dialog中是非静态的。我如何在内部静态类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。
答案 0 :(得分:1)
你不能,除非你能以某种方式获得ColorPickerDialog
的实例。是否严格要求内部类的static
修饰符?静态内部类无法访问周围类的实例。您可以使ColorPickerView
成为成员类(非静态内部类),也可以将对周围类的引用传递给它(在构造函数中或通过setter方法调用)。
成员类具有对周围实例的隐式引用,您可以直接调用周围类的方法。如果有名字隐藏;对于前假设ColorPickerView
也声明了close()
方法,您可以使用ColorPickerDialog.this.close()
调用外层方法。