android - Cannot call "persistInt" from inner class within Preference class -
i'm trying work building own preference classes, , having bit of trouble. looks way of saving data preference via "persist" group of methods within preference class. however, in preference, open color picker dialog, , need save preference within dialog's colorchanged override. whenever run app , try change color preference, get:
06-05 10:21:46.396: error/androidruntime(516): fatal exception: main java.lang.illegalaccesserror: tried access method android.preference.preference.persistint:(iiii)v class android.preference.colorselectionpreference$1 @ android.preference.colorselectionpreference$1.colorchanged(colorselectionpreference.java:55) @ android.apis.graphics.colorpickerdialog.onclick(colorpickerdialog.java:168) (update: 6/5/12 12:20) tried using callchangelistener force onpreferencechangelistener trigger, crashes identical error. without callchangelistener, preference data (probably) saved, onpreferencechangelistener doesn't triggered:
06-05 12:20:23.691: error/androidruntime(2834): fatal exception: main java.lang.illegalaccesserror: tried access method android.preference.colorselectionpreference.callchangelistener:(iiii)v class android.preference.colorselectionpreference$1 @ android.preference.colorselectionpreference$1.colorchanged(colorselectionpreference.java:52) @ android.apis.graphics.colorpickerdialog.onclick(colorpickerdialog.java:168) here's actual class:
package android.preference; import android.apis.graphics.colorpickerdialog; import android.content.context; import android.content.sharedpreferences; import android.graphics.color; import android.util.attributeset; public class colorselectionpreference extends preference { private context mcontext; private int mcolor; public colorselectionpreference(context context) { super(context); mcontext = context; } public colorselectionpreference(context context, attributeset attr) { super(context, attr); mcontext = context; } public int getcolor() { return mcolor; } public void setcolor(int color) { mcolor = color; } @override public void onclick() { //get original preference //set colorpickerdialog original preference color or default color colorpickerdialog dialog = new colorpickerdialog(mcontext, new colorpickerdialog.oncolorchangedlistener() { public void colorchanged(int a, int r, int g, int b) { int selectedcolor = color.argb(a,r,g,b); setcolor(selectedcolor); /*** crashes on callchangelistener ***/ //sharedpreferences prefs = preferencemanager.getdefaultsharedpreferences(mcontext); //sharedpreferences.editor edit = prefs.edit(); //edit.putint(getkey(), selectedcolor); //edit.commit(); //callchangelistener(selectedcolor); /*** offending code, error refers line ***/ persistint(selectedcolor); /*** tried request on irc ***/ //colorselectionpreference.this.persistint(selectedcolor); } }, mcolor); dialog.show(); } }
this hacky workaround uses handler call main class inner class. isn't pretty, works.
package android.preference; import android.apis.graphics.colorpickerdialog; import android.content.context; import android.content.sharedpreferences; import android.graphics.color; import android.os.bundle; import android.os.handler; import android.os.message; import android.util.attributeset; public class colorselectionpreference extends preference { private context mcontext; private int mcolor; private final handler mhandler = new handler() { @override public void handlemessage(message msg) { if(msg.getdata().containskey("color")) { int color = msg.getdata().getint("color"); setcolor(color); } } }; public colorselectionpreference(context context) { super(context); mcontext = context; } public colorselectionpreference(context context, attributeset attr) { super(context, attr); mcontext = context; } public int getcolor() { return mcolor; } public void setcolor(int color) { mcolor = color; persistint(new integer(color)); } @override public void onclick() { //get original preference //set colorpickerdialog original preference color or default color colorpickerdialog dialog = new colorpickerdialog(mcontext, new colorpickerdialog.oncolorchangedlistener() { public void colorchanged(int a, int r, int g, int b) { int selectedcolor = color.argb(a,r,g,b); bundle bundle = new bundle(); bundle.putint("color", selectedcolor); message msg = new message(); msg.setdata(bundle); mhandler.sendmessage(msg); //setcolor(selectedcolor); /*** tried this, onpreferencechangedlistener never gets triggered, won't work ***/ //sharedpreferences prefs = preferencemanager.getdefaultsharedpreferences(mcontext); //sharedpreferences.editor edit = prefs.edit(); //edit.putint(getkey(), selectedcolor); //edit.commit(); //callchangelistener(selectedcolor); /*** offending code, error refers line ***/ //container. /*** tried request on irc ***/ //colorselectionpreference.this.persistint(selectedcolor); } }, mcolor); dialog.show(); } }
Comments
Post a Comment