gpt4 book ai didi

android - registerOnSharedPreferenceChangeListener 不起作用

转载 作者:行者123 更新时间:2023-12-02 03:26:35 24 4
gpt4 key购买 nike

我试图通过更改首选项来更新我的应用程序背景颜色,但从未达到 onSharedPreferenceChanged 方法。首选项已成功更改,但监听器无法正常工作:

主要 Activity :

public class MainActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

private RecyclerView mRecyclerView;
private ContactsAdapter mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(myToolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

}

@Override
public void onResume() {
super.onResume();

SharedPreferences mSettings = PreferenceManager.getDefaultSharedPreferences(this);
mSettings.registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
super.onPause();

SharedPreferences mSettings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
mSettings.unregisterOnSharedPreferenceChangeListener(this);

}

@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
Intent intent = new Intent(this, MyPreferenceActivity.class);
startActivity(intent);
return true;
case R.id.action_favorite:
return true;
default:
return super.onOptionsItemSelected(item);
}
}

@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

if(key.equals("color")) {
String color = sharedPreferences.getString("color", "3");

int colorId = Integer.valueOf(color);

// Alterar background

ViewGroup viewGroup = (ViewGroup) ((ViewGroup) (findViewById(android.R.id.content))).getChildAt(0);

if (colorId == 1) {
viewGroup.setBackgroundColor(Color.WHITE);
} else if (colorId == 2) {
viewGroup.setBackgroundColor(Color.YELLOW);
} else if (colorId == 3) {
viewGroup.setBackgroundColor(Color.RED);
}

}
}
}

我的偏好 Activity :

public class MyPreferenceActivity extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.preference);

}
}

方法 onSharedPreferenceChanged 从未被调用,我让它工作的唯一方法是直接在 onResume 内部实现 OnSharedPreferenceChangeListener 方法,但有时它工作正常,有时则不能,并且未到达该方法。

最佳答案

共享首选项 registerOnSharedPreferenceChangeListener 仅当 MainActivity 位于前台时才有效,否则将在 onPause 中取消注册。

关于android - registerOnSharedPreferenceChangeListener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53193322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com