Kostya, You did not waste my time at all! First of all, this was a great learning opportunity. Second of all, the suggestion was great - this should have worked! Maybe I need to do a second pass, somehow, to reset the dependent keys. But if I need a second pass, maybe I just do it all at that time.
...Jake >>>>> "KV" == Kostya Vasilyev <kmans...@gmail.com> writes: KV> Jake, KV> I just tried it with a simple test, and yes, I get the same KV> exception. KV> The reason is that setDependency() tries to register the KV> dependency right away, and doesn't find the depndency because the KV> process of loading preferences from XML hasn't completed yet KV> (which it does not check). It *might* be possible to work around KV> it with more overrides here and there, but... instead... KV> I admit that the idea only seemed good, and then was crushed to KV> pieces by the reality of how things work. KV> My apologies for having wasted your time. KV> -- Kostya KV> 2011/5/27 Jake Colman <col...@ppllc.com> >> >> Kostya/String, >> >> Is nothing ever easy? So close, yet so far... :-) >> >> Some of my preferences have dependent keys. Since the keys are being >> renamed to be widget-specific I, of course, have to rename the dependent >> keys accordingly as well. >> >> Pref2 is dependent on Pref1. Pref1 comes through my overridden >> onPrepareAddPreference and I call setKey to rename its key. Pref2 comes >> through onPrepareAddPreference and I reset its key as usual and I also >> reset its dependent key to have the correct Pref1 key name. This >> triggers a java.lang.IllegalStateException stating that Dependency not >> found for preference. >> >> Since Pref1 has already been reset I would expect that by the time Pref2 >> comes in Pref1 is already out there. Also, I did not think that >> ordering would matter anyway as long as all the keys make sense at the >> of the inflation. >> >> Any ideas? >> >> Incidentally, I tried both onPrepareAddPreference and addPreference just >> in case one worked differently than the other. And, yes, I called up to >> super at the end of my overridden method. >> >> ...Jake >> >> >> >>>>> "KV" == Kostya Vasilyev <kmans...@gmail.com> writes: >> KV> Yes, a cast is what I'm suggesting. From the design point of KV> view, you'll end up with two classes that are meant to be used KV> together. >> KV> You could even do an instanceof check before the cast, and throw KV> an exception with a nice descriptive message if the check returns KV> false :) >> KV> -- KV> Kostya Vasilyev KV> 27.05.2011 1:56 пользователь "Jake Colman" KV> <col...@ppllc.com> KV> написал: >> >> >> >> >> >> All the magic happens from addPreferencesFromResource which inflates >> my >> >> preferences XML and instantiates the Preference objects. With >> >> everything we've discussed until now, I know what/how to subclass so >> >> that I can hook into things at the correct level to reset my key. But >> >> if it's WidgetOptionsActivity that has the widget id (from its super >> >> class) how does that get passed into addPreferencesFromResource? >> >> >> >> Unless you are suggesting that I can call a method via the context >> which >> >> is, in essence, my Activity? So cast the context into the Activity and >> >> call the method? >> >> >> >> >> >>>>>>> "KV" == Kostya Vasilyev <kmans...@gmail.com> writes: >> >> KV> Preferences are inflated with a Context, which in this case is KV> your PreferenceActivity subclass. >> >> KV> I'd make two classes, WidgetOptionsActivity and KV> WidgetOptionsPreferenceCategory, with the expectation that the KV> latter is always used within the former (like maps API and KV> MapActivity). >> >> KV> The widget id is passed to the activity as an intent extra, so KV> just get it from there and make available as a method / field KV> before you call addPreferencesFromResource(). >> >> KV> Then you could derive YourProjectNameWidgetOptionsActivity from KV> WidgetOptionsActivity. >> >> KV> -- Kostya >> >> KV> 2011/5/27 Jake Colman <col...@ppllc.com> >> >> >> >> >> >> >> >> Thanks Kostya and String, these were great answers. >> >> >> >> >> >> I can see how I can create my own subclass and use them instead of >> my >> >> >> the android classes. My problem now is that it is the Preference >> >> >> Activity, through an intent extra, that knows the specific widget >> ID KV> for >> >> >> which it is being displayed. I don't see that the Preference or >> >> >> PreferenceCategory subclassses have access to the parent activity >> that >> >> >> caused them to be created. Since Android is instantiating my >> subclasses >> >> >> for me, I don't see how I have a hook to pass the subclass the >> crucial >> >> >> piece of data required to reset its key - which is the whole >> purpose of >> >> >> this exercise. >> >> >> >> >> >> It looks like onPrepareAddPreference is probable the better place >> to >> >> >> reset the key than is addPreference simply because this is more of >> a >> >> >> preparation step anyway. It's great to have multiple options! >> >> >> >> >> >> ...Jake >> >> >> >> >> >> >> >> >> >>>>> "KV" == Kostya Vasilyev <kmans...@gmail.com> writes: >> >> >> KV> Where your preference class needs to have the standard KV> constructor, just like with views: >> >> >> KV> public class MyPreferenceCategory extends PreferenceCategory { >> >> >> KV> public MyPreferenceCategory(Context context, AttributeSet attrs) >> >> >> { KV> super(context, attrs); KV> } >> >> >> KV> } >> >> >> KV> And here is another useful override: >> >> >> KV> >> >> >> KV> >> http://developer.android.com/reference/android/preference/PreferenceGroup.html#onPrepareAddPreference(android.preference.Preference KV> ) >> >> >> KV> onPrepareAddPreference >> >> >> KV> -- Kostya >> >> >> KV> 2011/5/27 String <sterling.ud...@googlemail.com> >> >> >> >> >> >> >> In your XML settings-definition file, here's what you need. Just KV> use: >> >> >> >> >> >> >> >> <com.my.package.PrefSubclass >> >> >> >> android:key="pref_key" >> >> >> >> ... >> >> >> >> /> >> >> >> >> >> >> >> >> where "com.my.package" is your package name, and PrefSubclass is >> the >> >> >> class >> >> >> >> name of your Preference subclass. Use this instead of: >> >> >> >> >> >> >> >> <EditTextPreference >> >> >> >> android:key="pref_key" >> >> >> >> ... >> >> >> >> /> >> >> >> >> >> >> >> >> or whatever Preference class you're basing it off of. >> >> >> >> >> >> >> >> String >> >> >> >> >> >> >> >> -- >> >> >> >> You received this message because you are subscribed to the >> Google >> >> >> >> Groups "Android Developers" group. >> >> >> >> To post to this group, send email to >> >> >> android-developers@googlegroups.com >> >> >> >> To unsubscribe from this group, send email to >> >> >> >> android-developers+unsubscr...@googlegroups.com >> >> >> >> For more options, visit this group at >> >> >> >> http://groups.google.com/group/android-developers?hl=en >> >> >> >> >> >> >> KV> -- KV> You received this message because you are subscribed to the Google KV> Groups "Android Developers" group. KV> To post to this group, send email to >> >> >> android-developers@googlegroups.com KV> To unsubscribe from this group, send email to KV> android-developers+unsubscr...@googlegroups.com KV> For more options, visit this group at KV> http://groups.google.com/group/android-developers?hl=en >> >> >> >> >> >> -- >> >> >> Jake Colman -- Android Tinkerer >> >> >> >> >> >> -- >> >> >> You received this message because you are subscribed to the Google >> >> >> Groups "Android Developers" group. >> >> >> To post to this group, send email to KV> android-developers@googlegroups.com >> >> >> To unsubscribe from this group, send email to >> >> >> android-developers+unsubscr...@googlegroups.com >> >> >> For more options, visit this group at >> >> >> http://groups.google.com/group/android-developers?hl=en >> >> >> >> >> KV> -- KV> You received this message because you are subscribed to the Google KV> Groups "Android Developers" group. KV> To post to this group, send email to KV> android-developers@googlegroups.com KV> To unsubscribe from this group, send email to KV> android-developers+unsubscr...@googlegroups.com KV> For more options, visit this group at KV> http://groups.google.com/group/android-developers?hl=en >> >> >> >> -- >> >> Jake Colman -- Android Tinkerer >> >> >> >> -- >> >> You received this message because you are subscribed to the Google >> >> Groups "Android Developers" group. >> >> To post to this group, send email to >> android-developers@googlegroups.com >> >> To unsubscribe from this group, send email to >> >> android-developers+unsubscr...@googlegroups.com >> >> For more options, visit this group at >> >> http://groups.google.com/group/android-developers?hl=en >> KV> -- KV> You received this message because you are subscribed to the Google KV> Groups "Android Developers" group. KV> To post to this group, send email to >> android-developers@googlegroups.com KV> To unsubscribe from this group, send email to KV> android-developers+unsubscr...@googlegroups.com KV> For more options, visit this group at KV> http://groups.google.com/group/android-developers?hl=en >> >> -- >> Jake Colman -- Android Tinkerer >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Android Developers" group. >> To post to this group, send email to android-developers@googlegroups.com >> To unsubscribe from this group, send email to >> android-developers+unsubscr...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/android-developers?hl=en >> KV> -- KV> You received this message because you are subscribed to the Google KV> Groups "Android Developers" group. KV> To post to this group, send email to android-developers@googlegroups.com KV> To unsubscribe from this group, send email to KV> android-developers+unsubscr...@googlegroups.com KV> For more options, visit this group at KV> http://groups.google.com/group/android-developers?hl=en -- Jake Colman -- Android Tinkerer -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en