【问题标题】:Spinner not saving as Shared/Saved Preference微调器未另存为共享/保存的首选项
【发布时间】:2016-02-26 23:41:03
【问题描述】:

使用共享首选项保存字符串,但保存我的微调器时遇到困难。

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

【问题讨论】:

  • 看起来您在微调器甚至与小部件关联之前调用了loadData()(它设置微调器值)。您应该将 'loadData()' 移动到 spnExample.setAdapter 下方,甚至是 onStart() 方法中。
  • 你能看看stackoverflow.com/questions/35670184/…吗?我正在尝试使用这种方法来保存两个链接的微调器并且遇到了问题。再次感谢:)

标签: android sharedpreferences spinner android-spinner


【解决方案1】:

建议您在spnExample 初始化后移动loadData,如下面的代码所示。或者您也可以将您的loadData 移至onResume()

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2019-04-09
  • 2013-06-19
  • 2017-12-02
相关资源
最近更新 更多