0

我想使用存储在共享首选项中的值更新 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 值发生变化时,我都会将其保存在 Preferences 中,但是在哪里检索该值?我知道要检索的代码:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int someInteger = sharedPref.getInt("someInteger", 0);

但是把这段代码放在哪里,在里面onCreate()还是onCreateView()?如果值存在,则检索该值后,如何调用onValueChange()以执行该方法中的所有语句?

4

1 回答 1

0

您不必从SharedPreferences.

在里面onCreateView,使用方法设置NumberPickersetValue

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

    // ...

}
于 2016-06-28T13:31:00.980 回答