onSharedPreferenceChange 侦听器 -> 在片段中
onSharedPreferenceChange Listener -> In Fragment
嘿,我正在尝试将 onSharedPreference 侦听器添加到 n 片段中。它应该调节是否完成更改(在设置中切换) Fragment 内的 NumberPicker 的值也会更改(0 或 1)。
监听器的问题:它只工作了前 5-10 次,然后就不再被调用了(我想)? -> 没有对 NumberPicker 进行任何更改
按照我的片段的重要代码:
public class FragmentTwo extends Fragment {
private EditText mEnterWeight;
private NumberPicker mUnitPicker;
private TextView mConverted;
private int pick;
private String convertedWeightMessage;
private Double enteredWeight;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_two, container, false);
mEnterWeight = (EditText) view.findViewById(R.id.WCenterWeight);
mUnitPicker = (NumberPicker) view.findViewById(R.id.WCunitPicker);
mConverted = (TextView) view.findViewById(R.id.WCconverted);
initialiseUnitPicker();
//some stuff
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
// listener implementation
if(key.equals("SwitchMainUnit")) {
Boolean kg = prefs.getBoolean("SwitchMainUnit", true);
if(kg)
mUnitPicker.setValue(0);
else mUnitPicker.setValue(1);
}
}
};
prefs.registerOnSharedPreferenceChangeListener(listener);
return view;
}
文档说我需要将 onResume() 和 onPause() 更改为:
@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
但是我需要在哪里添加这些呢?当我尝试将它添加到片段中时出现错误。
感谢您的帮助;我自己没有找到任何解决方案.. :/
文档说
Caution: When you call registerOnSharedPreferenceChangeListener(), the
preference manager does not currently store a strong reference to the
listener
我建议您将 SharedPreferences.OnSharedPreferenceChangeListener listener
的实例存储为 onCreateView
之外的字段。
示例代码:
public class FragmentTwo 扩展片段 {
private EditText mEnterWeight;
private NumberPicker mUnitPicker;
private TextView mConverted;
private int pick;
private String convertedWeightMessage;
private Double enteredWeight;
SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
// listener implementation
if (key.equals("SwitchMainUnit")) {
Boolean kg = prefs.getBoolean("SwitchMainUnit", true);
if (kg) mUnitPicker.setValue(0);
else mUnitPicker.setValue(1);
}
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_two, container, false);
mEnterWeight = (EditText) view.findViewById(R.id.WCenterWeight);
mUnitPicker = (NumberPicker) view.findViewById(R.id.WCunitPicker);
mConverted = (TextView) view.findViewById(R.id.WCconverted);
initialiseUnitPicker();
//some stuff
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
prefs.registerOnSharedPreferenceChangeListener(listener);
return view;
}
嘿,我正在尝试将 onSharedPreference 侦听器添加到 n 片段中。它应该调节是否完成更改(在设置中切换) Fragment 内的 NumberPicker 的值也会更改(0 或 1)。
监听器的问题:它只工作了前 5-10 次,然后就不再被调用了(我想)? -> 没有对 NumberPicker 进行任何更改 按照我的片段的重要代码:
public class FragmentTwo extends Fragment {
private EditText mEnterWeight;
private NumberPicker mUnitPicker;
private TextView mConverted;
private int pick;
private String convertedWeightMessage;
private Double enteredWeight;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_two, container, false);
mEnterWeight = (EditText) view.findViewById(R.id.WCenterWeight);
mUnitPicker = (NumberPicker) view.findViewById(R.id.WCunitPicker);
mConverted = (TextView) view.findViewById(R.id.WCconverted);
initialiseUnitPicker();
//some stuff
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
// listener implementation
if(key.equals("SwitchMainUnit")) {
Boolean kg = prefs.getBoolean("SwitchMainUnit", true);
if(kg)
mUnitPicker.setValue(0);
else mUnitPicker.setValue(1);
}
}
};
prefs.registerOnSharedPreferenceChangeListener(listener);
return view;
}
文档说我需要将 onResume() 和 onPause() 更改为:
@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
但是我需要在哪里添加这些呢?当我尝试将它添加到片段中时出现错误。
感谢您的帮助;我自己没有找到任何解决方案.. :/
文档说
Caution: When you call registerOnSharedPreferenceChangeListener(), the preference manager does not currently store a strong reference to the listener
我建议您将 SharedPreferences.OnSharedPreferenceChangeListener listener
的实例存储为 onCreateView
之外的字段。
示例代码:
public class FragmentTwo 扩展片段 {
private EditText mEnterWeight;
private NumberPicker mUnitPicker;
private TextView mConverted;
private int pick;
private String convertedWeightMessage;
private Double enteredWeight;
SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
// listener implementation
if (key.equals("SwitchMainUnit")) {
Boolean kg = prefs.getBoolean("SwitchMainUnit", true);
if (kg) mUnitPicker.setValue(0);
else mUnitPicker.setValue(1);
}
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_two, container, false);
mEnterWeight = (EditText) view.findViewById(R.id.WCenterWeight);
mUnitPicker = (NumberPicker) view.findViewById(R.id.WCunitPicker);
mConverted = (TextView) view.findViewById(R.id.WCconverted);
initialiseUnitPicker();
//some stuff
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
prefs.registerOnSharedPreferenceChangeListener(listener);
return view;
}