Actually, the reason we went down this path in the first place was because if I did not reset the keys during the inflation process the Preference Screen did not reflect the current values. I can still use a second pass, however, inside of onCreate() but after inflation to reset the dependent keys. That should probably work.
>>>>> "Jake" == Jake Colman <[email protected]> writes: Jake> Kostya, Jake> You did not waste my time at all! First of all, this was a Jake> great learning opportunity. Second of all, the suggestion was Jake> great - this should have worked! Maybe I need to do a second Jake> pass, somehow, to reset the dependent keys. But if I need a Jake> second pass, maybe I just do it all at that time. Jake> ...Jake >>>>> "KV" == Kostya Vasilyev <[email protected]> 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 <[email protected]> >>> >>> 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 <[email protected]> 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> <[email protected]> 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 <[email protected]> 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 <[email protected]> >>> >> >>> >> >> >>> >> >> 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 <[email protected]> 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 <[email protected]> >>> >> >> >>> >> >> >> 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 >>> >> >> [email protected] >>> >> >> >> To unsubscribe from this group, send email to >>> >> >> >> [email protected] >>> >> >> >> 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 >>> >> >> [email protected] KV> To unsubscribe from this group, send email to KV> [email protected] 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> [email protected] >>> >> >> To unsubscribe from this group, send email to >>> >> >> [email protected] >>> >> >> 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> [email protected] KV> To unsubscribe from this group, send email to KV> [email protected] 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 >>> [email protected] >>> >> To unsubscribe from this group, send email to >>> >> [email protected] >>> >> 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 >>> [email protected] KV> To unsubscribe from this group, send email to KV> [email protected] 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 >>> [email protected] >>> To unsubscribe from this group, send email to >>> [email protected] >>> 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> [email protected] KV> To unsubscribe from this group, send email to KV> [email protected] KV> For more options, visit this group at KV> http://groups.google.com/group/android-developers?hl=en Jake> -- Jake> Jake Colman -- Android Tinkerer Jake> -- Jake> You received this message because you are subscribed to the Google Jake> Groups "Android Developers" group. Jake> To post to this group, send email to [email protected] Jake> To unsubscribe from this group, send email to Jake> [email protected] Jake> For more options, visit this group at Jake> 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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

