Как вызвать onvaluechange NumberPicker из 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() чтобы все операторы внутри этого метода выполнялись?

1 ответ

Решение

Вам не нужно звонить из SharedPreferences,

внутри onCreateView, установить NumberPicker значение с помощью setValue метод.

@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);

    // ...

}
Другие вопросы по тегам