Android 侦听首选项更改并将复选框中的布尔值转移到MainActivity
我有两个文件: control_preferences.xml:`Android 侦听首选项更改并将复选框中的布尔值转移到MainActivity,android,android-sharedpreferences,Android,Android Sharedpreferences,我有两个文件: control_preferences.xml:` ` SettingsActivity.java: package com.sample; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.
`
SettingsActivity.java:
package com.sample;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;
public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
public static final String KEY_PREF_DEBUG = "checkboxPref";
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals(KEY_PREF_DEBUG)) {
Toast.makeText(getApplicationContext(), "CLICK",
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
public static class ControlPrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// load the preferences from an XML resource
addPreferencesFromResource(R.xml.fragmented_control_preferences);
}
}}
package.com.sample;
导入android.content.SharedReferences;
导入android.os.Bundle;
导入android.preference.CheckBoxPreference;
导入android.preference.preference;
导入android.preference.PreferenceActivity;
导入android.preference.PreferenceFragment;
导入android.preference.PreferenceManager;
导入android.util.Log;
导入android.widget.Toast;
公共类设置活动扩展首选项活动实现SharedReferences.OnSharedPreferenceChangeListener{
公共静态最终字符串键\u PREF\u DEBUG=“checkboxPref”;
@凌驾
已更改共享首选项的公共无效(SharedReferences SharedReferences,
字符串键){
if(key.equals(key\u PREF\u DEBUG)){
Toast.makeText(getApplicationContext(),“单击”,
吐司。长度(短)。show();
}
}
@凌驾
public void onBuildHeaders(列表目标){
loadHeadersFromResource(R.xml.preference_头,目标);
}
公共静态类ControlPrefsFragment扩展了PreferenceFragment{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//从XML资源加载首选项
addPreferencesFromResource(R.xml.fragmented\u control\u preferences);
}
}}
我有两个问题:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(prefs);
2) 如何将此复选框中的布尔值存储在SharedReferences中,然后在MainActivity中读取此布尔值?
使用下面的代码获取值
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.getBoolean("key_value_given_in_preference_xml_file")
使用此接口而不是实现接口
checkboxPref = (CheckBoxPreference) getPreferenceScreen().findPreference(your_key);
checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
{
@Override
public boolean onPreferenceChange(Preference preference, Object newValue)
{
YOUR CODE
return false;
}
});
@贾韦吉尔
我将此插入:
public static class ControlPrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// load the preferences from an XML resource
addPreferencesFromResource(R.xml.fragmented_control_preferences);
final CheckBoxPreference checkboxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkboxPref");
checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
{
@Override
public boolean onPreferenceChange(Preference preference, Object newValue)
{
Toast.makeText(getActivity().getApplicationContext(), "CLICK",
Toast.LENGTH_SHORT).show();
return false;
}
});
}
}
它是有效的:)
谢谢你们两位:)@Jawegiel
如果我在MainActivity中使用类似于“Debug:”+“boolean from this actual changed checkbox”的Toast,会怎么样?我通过代码阅读了这个boolean:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean check = prefs.getBoolean("checkboxPref",false);
如何在SettingsActivity中读取与在MainActivity中相同的布尔值
我尝试通过以下代码:
checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
{
@Override
public boolean onPreferenceChange(Preference preference, Object newValue)
{
boolean check = checkboxPref.getSharedPreferences().getBoolean("checkboxPref",false);
Toast.makeText(getActivity().getApplicationContext(), "Debug " + check,
Toast.LENGTH_SHORT).show();
return false;
}
});
但现在我无法取消选中复选框或单击if false:d在SettingsActivity->onResume中插入此代码的位置?
checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
{
@Override
public boolean onPreferenceChange(Preference preference, Object newValue)
{
boolean check = checkboxPref.getSharedPreferences().getBoolean("checkboxPref",false);
Toast.makeText(getActivity().getApplicationContext(), "Debug " + check,
Toast.LENGTH_SHORT).show();
return false;
}
});