如何从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);

    // ...

}