2016-02-26 42 views
0

使用共享優先保存字符串,但難以保存我的微調。微調不保存爲共享/保存偏好

public class MainActivity extends Activity { 

Spinner spnExample; 
Button btnSave; 
ArrayAdapter<CharSequence> adapter; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button btnSave = (Button) findViewById(R.id.btnSave); 

    SharedPreferences prefs; 

    loadData(); 

    spnExample = (Spinner) findViewById(R.id.spnExample); 
    adapter = ArrayAdapter.createFromResource(this, R.array.country_arrays, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spnExample.setAdapter(adapter); 

    spnExample.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      Toast.makeText(getBaseContext(), parent.getItemAtPosition(position) + " selected", Toast.LENGTH_SHORT).show(); 


     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 

這裏是我救了我的喜好按鈕後面(中的onCreate)

btnSave.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      SharedPreferences.Editor editor = getPreferences(0).edit(); 

      EditText etName = (EditText) findViewById(R.id.etName); 
      editor.putString("editTextCallIdtext", etName.getText().toString()); 


      int selectedPosition = spnExample.getSelectedItemPosition(); 
      editor.putInt("spinnerSelection", selectedPosition); 


      editor.commit(); 

     } 
    }); 
} 

這個方法我使用加載的偏好(的onCreate外)

private void loadData() { 

    SharedPreferences prefs = getPreferences(0); 

    EditText etName = (EditText) findViewById(R.id.etName); 
    String etNametextrestored = prefs.getString("editTextCallIdtext", null); 

    spnExample.setSelection(prefs.getInt("spinnerSelection",0)); 

    etName.setText(etNametextrestored, EditText.BufferType.EDITABLE); 
} 
+0

看起來你調用'loadData()'(它設置微調值)之前微調甚至與小部件關聯。您應該將'loadData()'移動到'spnExample.setAdapter'下方,或者甚至在'onStart()'方法中移動。 – CaptJak

+0

你能看看http://stackoverflow.com/questions/35670184/two-linked-spinners-not-saving-as-shared-preferences請嗎?我試圖用這種方法來保存兩個鏈接的spinners並且遇到問題。再次感謝:) – Coco12

回答

1

建議您在spnExample初始化後移動loadData,如下面的代碼所示。或者,你也可以將你的loadDataonResume()

SharedPreferences prefs; 

spnExample = (Spinner) findViewById(R.id.spnExample); 
adapter = ArrayAdapter.createFromResource(this, R.array.country_arrays, android.R.layout.simple_spinner_item); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spnExample.setAdapter(adapter); 
spnExample.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     Toast.makeText(getBaseContext(), parent.getItemAtPosition(position) + " selected", Toast.LENGTH_SHORT).show(); 


    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    } 

loadData(); // Do this after spnExample got initialized 
+0

你能看看http://stackoverflow.com/questions/35670184/two-linked-spinners-not-saving-as-shared-preferences請嗎?我試圖用這種方法來保存兩個鏈接的spinners並且遇到問題。再次感謝 :) – Coco12