Update existing Preference-item in a PreferenceActivity upon returning from a (sub)PreferenceScreen

android, invalidation, preferenceactivity, preferences

Solution

I found a solution to this. I have a hierarchy like this, each of these is a PreferenceScreen:

main settings
  -> users list
    -> user1 settings
    -> user2 settings
    ...

In the users list, title of the sub-screen is dependent on the user settings. Now when I create the user list, I store the list adapter to a variable in my PreferenceActivity.

 PreferenceScreen usersListScreen = ...
 userScreenListAdapter = (BaseAdapter)usersListScreen.getRootAdapter();

Now when userX-settings are edited, I set the titles in the usersListScreen and after that call:

userScreenListAdapter.notifyDataSetChanged();

which updates the list UI and the changes are visible.

Problem

I have a PreferenceActivity with a bunch of (Sub)PreferenceScreens. Each such (Sub)PreferenceScreen represents an account and has the account-username as its title. ``` PreferenceScreen root = mgr.createPreferenceScreen(this); for (MyAccountClass account : myAccounts) { final PreferenceScreen accScreen = mgr.createPreferenceScreen(this); accScreen.setTitle(account.getUsername()); // add Preferences to the accScreen // (for instance a "change username"-preference) ... root.add(accScreen); } ``` As the user enters sub-PreferenceScreen, and edits the account user-name, I want the outer PreferenceScreen to update it's PreferenceScreen-title for the account in question. I've tried to add... ``` usernamePref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { accScreen.setTitle(newValue.toString()); return true; } }); ``` ...but the accScreen.setTitle does not seem to take effect on the outer PreferenceScreen. I've note that calling `onContentChanged();` actually makes it work, but I realize that this is probably not the preferred way of doing it. I suspect I should call `postInvalidate()` on some view somewhere, but I really can't figure out on what view and when to do it. PreferenceScreen android:summary update ! may be experiening the same problem as me. Any help appreciated.

Original source

Related problems