- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过更改首选项来更新我的应用程序背景颜色,但从未达到 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/
我试图通过更改首选项来更新我的应用程序背景颜色,但从未达到 onSharedPreferenceChanged 方法。首选项已成功更改,但监听器无法正常工作: 主要 Activity : public
我试图通过更改首选项来更新我的应用程序背景颜色,但从未达到 onSharedPreferenceChanged 方法。首选项已成功更改,但监听器无法正常工作: 主要 Activity : public
在我维护的一些代码中,我注意到有两种不同的方式来注册共享偏好更改监听器: (1) 直接的方法,包含注册成员函数的类实现SharedPreferences.OnSharedPreferenceChang
这个问题在这里已经有了答案: SharedPreferences.onSharedPreferenceChangeListener not being called consistently (8
您好,我遇到了在 MainActivity 中注册 onSharedPreferenceChangeListener 的问题。我唯一的偏好是具有 3 个不同选项的 ListPreference。因此,
当我调用 Intent 时 public class TInfo extends ListActivity implements OnSharedPreferenceChangeListene
每当我尝试添加这一行时,它都会使我的应用程序崩溃。我没有把它放在正确的位置吗? preferences.registerOnSharedPreferenceChangeListener(myA
我是一名优秀的程序员,十分优秀!