如何从SharedPreferences调用NumberPicker的onvaluechange?
How to call NumberPicker's onvaluechange from SharedPreferences?
我想使用共享首选项中存储的值更新 NumberPicker。这一切都发生在一个片段中,还有一个按钮,只要用户点击它就会调用 onValueChange()
方法。
HomeFragment.java
import android.content.SharedPreferences;
import android.widget.NumberPicker;
public class HomeFragment extends Fragment {
NumberPicker numberPicker;
SharedPreferences sharedPref;
public HomeFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
numberPicker = (NumberPicker) rootView.findViewById(R.id.np);
//Populate NumberPicker values from minimum and maximum value range
//Set the minimum value of NumberPicker
numberPicker.setMinValue(0);
//Specify the maximum value/number of NumberPicker
numberPicker.setMaxValue(239);
//Gets whether the selector wheel wraps when reaching the min/max value.
numberPicker.setWrapSelectorWheel(true);
//Set a value change listener for NumberPicker
final NumberPicker.OnValueChangeListener np_listener = new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal){
//Statement goes here...
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("someInteger", newVal);
editor.commit();
}
};
numberPicker.setOnValueChangedListener(np_listener);
b1 = (Button) rootView.findViewById(R.id.button);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int oldValue = numberPicker.getValue();
numberPicker.setValue(oldValue + 1);
np_listener.onValueChange(numberPicker, oldValue, oldValue + 1);
}
});
// Inflate the layout for this fragment
return rootView;
}
}
每当 NumberPicker 值发生变化时,我都会将其保存在首选项中,但是从哪里检索该值?我知道检索代码:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int someInteger = sharedPref.getInt("someInteger", 0);
但是将此代码放在哪里,在 onCreate()
或 onCreateView()
中?检索到值后,如果它存在,那么如何调用 onValueChange()
以便执行该方法中的所有语句?
您不必从 SharedPreferences
调用它。
在 onCreateView
中,使用 setValue
方法设置 NumberPicker
值。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// ... some code ...
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
// Use default value 0 if key does not exist
int someInteger = sharedPref.getInt("someInteger", 0);
numberPicker = (NumberPicker) rootView.findViewById(R.id.np);
numberPicker.setValue(someInteger);
// ...
}
我想使用共享首选项中存储的值更新 NumberPicker。这一切都发生在一个片段中,还有一个按钮,只要用户点击它就会调用 onValueChange()
方法。
HomeFragment.java
import android.content.SharedPreferences;
import android.widget.NumberPicker;
public class HomeFragment extends Fragment {
NumberPicker numberPicker;
SharedPreferences sharedPref;
public HomeFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
numberPicker = (NumberPicker) rootView.findViewById(R.id.np);
//Populate NumberPicker values from minimum and maximum value range
//Set the minimum value of NumberPicker
numberPicker.setMinValue(0);
//Specify the maximum value/number of NumberPicker
numberPicker.setMaxValue(239);
//Gets whether the selector wheel wraps when reaching the min/max value.
numberPicker.setWrapSelectorWheel(true);
//Set a value change listener for NumberPicker
final NumberPicker.OnValueChangeListener np_listener = new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal){
//Statement goes here...
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("someInteger", newVal);
editor.commit();
}
};
numberPicker.setOnValueChangedListener(np_listener);
b1 = (Button) rootView.findViewById(R.id.button);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int oldValue = numberPicker.getValue();
numberPicker.setValue(oldValue + 1);
np_listener.onValueChange(numberPicker, oldValue, oldValue + 1);
}
});
// Inflate the layout for this fragment
return rootView;
}
}
每当 NumberPicker 值发生变化时,我都会将其保存在首选项中,但是从哪里检索该值?我知道检索代码:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int someInteger = sharedPref.getInt("someInteger", 0);
但是将此代码放在哪里,在 onCreate()
或 onCreateView()
中?检索到值后,如果它存在,那么如何调用 onValueChange()
以便执行该方法中的所有语句?
您不必从 SharedPreferences
调用它。
在 onCreateView
中,使用 setValue
方法设置 NumberPicker
值。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// ... some code ...
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
// Use default value 0 if key does not exist
int someInteger = sharedPref.getInt("someInteger", 0);
numberPicker = (NumberPicker) rootView.findViewById(R.id.np);
numberPicker.setValue(someInteger);
// ...
}