Как я могу обновить TextView при изменении SharedPreference? - PullRequest
2 голосов
/ 22 февраля 2012

Я пытался выполнить следующие действия, чтобы текстовое представление обновлялось при любых изменениях, внесенных в SharedPreference, но у меня возникают трудности с определением моего следующего шага.Кто-нибудь?:)

public class CallForwardActivity extends Activity implements
        OnSharedPreferenceChangeListener {

    SharedPreferences userInfo;
    Context context;
    UserController userControl;
    private static final String USERINFO_FILE = "StoredUserInfo";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.callforward);
        context = this;
        userInfo = this.getSharedPreferences(USERINFO_FILE, 0);
        userControl = new UserController(context);
        final TextView setActiveNumberTV = (TextView)
                                        findViewById(R.id.activeNumberTextView);
        setActiveNumberTV.setText(userControl.GetActiveNumber());
        final RelativeLayout showAvailablenumbers = (RelativeLayout)
                                        findViewById(R.id.showAvailableNumbers);
        showAvailablenumbers.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent i = new Intent(getParent(),
                        AvailableNumbersActivity.class);
                SettingsActivityGroup parentActivity =
                                            (SettingsActivityGroup) getParent();
                parentActivity.ReplaceView(
                        "Show Available Numbers Activity", i);
            }
        });
    }

    public void onSharedPreferenceChanged(SharedPreferences arg0,
            String arg1) {
        final TextView setActiveNumberTV = (TextView)
                                        findViewById(R.id.activeNumberTextView);
        setActiveNumberTV.setText("...");
    }
}

Ответы [ 3 ]

4 голосов
/ 22 февраля 2012

Вы не зарегистрировали OnPreferenceChangedListener.Звоните userInfo.registerOnSharedPreferenceChangeListener(this) в onCreate и все должно работать.

2 голосов
/ 22 февраля 2012

Просто попробуй ...

public class CallForwardActivity extends Activity implements OnSharedPreferenceChangeListener
    {
    SharedPreferences userInfo;
    Context context;
    UserController userControl;
    private static final String USERINFO_FILE = "StoredUserInfo";
    private TextView setActiveNumberTV;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.callforward);
        context = this;
        userInfo = this.getSharedPreferences(USERINFO_FILE, 0);
            userInfo.registerOnSharedPreferenceChangeListener(this);
        userControl = new UserController(context);
        setActiveNumberTV = (TextView) findViewById(R.id.activeNumberTextView);
        setActiveNumberTV.setText(userControl.GetActiveNumber());       
        final RelativeLayout showAvailablenumbers = (RelativeLayout) findViewById(R.id.showAvailableNumbers); 
        showAvailablenumbers.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
                Intent i = new Intent(getParent(), AvailableNumbersActivity.class);
                SettingsActivityGroup parentActivity = (SettingsActivityGroup)getParent();
                parentActivity.ReplaceView("Show Available Numbers Activity", i);
            }
        });
    }

    public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) 
    {
        setActiveNumberTV.setText(arg0.getString(arg1, "default"));
    }

}
2 голосов
/ 22 февраля 2012

Вы не добавляете sharedPreferenceChangedListener в ваши sharedPreferences ни в какой момент.

Попробуйте это:

  userInfo.registerOnSharedPreferenceChangeListener(this);

сразу после создания экземпляра объекта userInfo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...