【问题标题】:pref screen opens multiple times android首选项屏幕多次打开android
【发布时间】:2013-07-09 09:17:04
【问题描述】:

我有一个偏好,我动态放置字符串并重新加载活动以立即显示更改,如下所示:

void restartActivity() {
            Intent intent = getIntent();
            finish();
            startActivity(intent);
}

问题是我正在更改其他一些首选项值,而特定值具有特定值。这会导致 SHAREDPREFERENCELISTENER 一次又一次地运行,从而导致上述方法一次又一次地运行。

由于某种原因,这会导致在顶部创建多个首选项屏幕。

为了清除一些东西,我确实有这个:

@Override

protected void onPause() {
    super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);

}

@Override
protected void onResume() {
    super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

@Override
protected void onDestroy() {
    getPreferenceScreen().getSharedPreferences()
            .unregisterOnSharedPreferenceChangeListener(this);
    super.onDestroy();
}

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    PreferenceScreen screen = this.getPreferenceScreen();

关于如何限制该功能使其不会一遍又一遍地创建屏幕的任何想法?

【问题讨论】:

    标签: android preferences


    【解决方案1】:

    重新启动活动后,将布尔值设置为 true。重启完成后设置为false。仅当是false 时才调用startActivity

    声明一个字段:private boolean mRestarted = false;

    restartActivity:

    void restartActivity() {
        if(!mRestarted} {
            Intent intent = getIntent();
            finish();
            startActivity(intent);
            mRestarted = true;
        }
    }
    

    onCreate:

    mRestarted = false;
    

    这会奏效。但刷新值是一种不好的方法...您应该执行其他操作来重新加载更改。

    【讨论】:

    • 首先什么不起作用?我的意思是,哪些值在偏好中发生了变化,而在活动本身中没有更新?
    • stackoverflow.com/questions/7603633/…: 这就是我正在做的……(虽然我使用的方法不是来自这里)
    • 嗯,它应该可以工作(例如,更改首选项 EditText 本身的值)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多