2016-06-28 11 views
0

Ich möchte den NumberPicker mit dem in Shared Preferences gespeicherten Wert aktualisieren. Dies geschieht alles innerhalb eines Fragments, es gibt auch eine Schaltfläche, die die Methode onValueChange() aufruft, wenn der Benutzer darauf klickt.Wie man NumberPickers onvaluechange von SharedPreferences anruft?

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; 
} 
} 

Immer wenn der Number Wert ändert, spare ich es in den Einstellungen aber, wo der Wert abgerufen werden? Ich weiß, dass der Code abgerufen werden:

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

Aber wo diesen Code setzen, innerhalb onCreate() oder onCreateView()? Nachdem der Wert abgerufen wurde, wenn er existiert, wie wird dann onValueChange() aufgerufen, so dass alle Anweisungen innerhalb dieser Methode ausgeführt werden?

Antwort

0

Sie müssen nicht von SharedPreferences anrufen.

Innerhalb onCreateView, setzen Sie den NumberPicker Wert mit der setValue Methode.

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

    // ... 

} 
+0

Und 'onValueChange()' zu nennen, ich bin mit 'np_listener.onValueChange (Number, someInteger - 1, someInteger);' kurz nach dem Hörer Anzahl Picker hinzugefügt wird. –