如何保存微调器选定值(它跳回到值0)

时间:2015-08-06 03:25:03

标签: android sqlite spinner

*解决方案*

这可能不是一个完美的解决方案,但绝对适合我:)

更新load()

private void load() {

    if (helper.getResults(c).equals("Yes")) {
        spinner.setSelection(0);
    } else if (helper.getResults(c).equals("No")) {
        spinner.setSelection(1);
    }
}

结果=您声明的助手
"是" /"否" =你的选择
0 =是
1 =否

根据您的需求进行更新

*更新*

我实际上将选定的微调器存储到一个EditText中,然后选定的微调器将捕获值到EditText。 但是,当我想再次编辑数据库时,而不是显示"否"在EditText和Spinner值中,它显示" Yes"在EditText和Spinner Value中。

我使用Spinner获取值(是和否)并保存到SQLite数据库。' 按下保存按钮后,所选微调器的值将保存到字符串中。

但是当用户选择&#34; no&#34;时,当我尝试更改数据时,会保存其他值(edittext),但Spinner值会跳回到&#34;是&#34;。< / p>

我希望如果用户选择&#34; no&#34;,当他想要编辑数据库时,它仍会显示&#34; no&#34;

@覆盖     public void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
    setContentView(R.layout.results);

    spinner = (Spinner) findViewById(R.id.spinner);
    text = (EditText) findViewById(R.id.categoryET);

    list = new ArrayList<String>();
    list.add("Yes");
    list.add("No");


    ArrayAdapter<String> adp = new ArrayAdapter<String>
            (this, android.R.layout.simple_spinner_dropdown_item, list);
    adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);

    mMyPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    mMyEdit = mMyPrefs.edit();

    spinner.setAdapter(adp);

    int selectedPosition = mMyPrefs.getInt("selected_position", 0) ;
    text.setText(list.get(selectedPosition));
    spinner.setSelection(selectedPosition);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                                   int position, long id) {

            // TODO Auto-generated method stub

            switch(position) {

                case 0 :
                    text.setText("Yes");
                    break;
                case 1 :
                    text.setText("No");
                    break;
                default :
                    text.setText("Nothing");
                    break;
            }

            Toast.makeText(getBaseContext(), parent.getItemAtPosition(position) + "", Toast.LENGTH_SHORT).show();
            mMyEdit.putInt("selected_position", spinner.getSelectedItemPosition());
            mMyEdit.commit();


        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

2 个答案:

答案 0 :(得分:0)

我将假设您在onStart()重新参加活动,如果您正在做不同的事情,只需切换onStart()以获取相应的条目点。

您必须跟踪上次使用的变量,并将其作为onStart()中的设置值传递给微调器。

您可以使用几个选项来存储上次使用的变量,它们取决于您希望设置的生存时间。最简单的是每个应用程序运行,您可以通过将微调器值设置为text中的onStart()变量来实现此目的。

其他选项是多次运行应用程序的持久性,即使这样,您也有几个选项。最明显的是使用sqlite,因为你已经是,并且希望对它有经验。您可以简单地为上次使用的变量添加数据库条目,并在onStart()中读取它。

其他选项包括在内部/外部存储设备上创建文件,Android SharedPreferences以及其他列出here的文件。

答案 1 :(得分:0)

你可以这样做:

private SharedPreferences mMyPrefs;
private Editor mMyEdit;

on onCreate()

mMyPrefs = PreferenceManager.getDefaultSharedPreferences(this);
mMyEdit = mMyPrefs.edit();


ArrayAdapter<String> adp = new ArrayAdapter<String>
            (this, android.R.layout.simple_spinner_dropdown_item, list);
    adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);

    spinner.setAdapter(adp);

int selectedPosition = mMyPrefs.getInt("selected_position", 0) ;
your_edittext.setText(list.get(selectedPosition));
spinner.setSelection(selectedPosition);
setOnItemSelectedListener()

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
 @Override
 public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

 mMyEdit.putInt("selected_position", spinner.getSelectedItemPosition());
 mMyEdit.commit();

 // Other stuff

 }

希望它会对你有所帮助。