获取Spinner的位置并将其选中

时间:2014-01-31 20:14:12

标签: java android android-spinner

我需要在prefs中保存我的Spinner的值或位置,并且当用户访问设置活动时将其显示为已选中。但是我遇到了麻烦。我的问题在于获取项目位置并在列表中选择使用它。

Spinner代码

    Spinner spinner = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.spinner, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

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

            item = parent.getSelectedItem().toString();
            Log.v("SPINNER", item);

             //SAVE PREFS WITH SPINNER VALUE
             SharedPreferences prefs;
             prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
             SharedPreferences.Editor prefEditor = prefs.edit();
             prefEditor.putString("spinner",item);
             prefEditor.commit();
             //RETREIVE SPINNER VALE PREFS
             String spinner=PreferenceManager
                     .getDefaultSharedPreferences(getBaseContext())
                     .getString("spinner","");
//CHECK 
for(int i=0;i<9;i++)
if(spinner.equals(parent.getSelectedItem().toString())){
     spinner.setSelection(parent.getItemAtPosition(position));
     break;
}

        }

        public void onNothingSelected(AdapterView<?> parent) {
            //String str = "Selecciona";
        }

    });

XML

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="spinner">
        <item>10:00</item>
        <item>11:00</item>
        <item>12:00</item>
        <item>13:00</item>
        <item>14:00</item>
        <item>15:00</item>
        <item>16:00</item>
        <item>17:00</item>
        <item>18:00</item>
        <item>19:00</item>
        <item>20:00</item>
        <item>21:00</item>
        <item>22:00</item>
        <item>23:00</item>
        <item>24:00</item>
    </string-array>
</resources>

3 个答案:

答案 0 :(得分:1)

这可能会有所帮助

if(spinner.equals(parent.getSelectedItem().toString())){

将其更改为

if(item.equals(parent.getSelectedItem().toString())){

如果我理解你的问题......

答案 1 :(得分:1)

我认为获取在微调器中选择的项目的更好方法是在onItemSelected方法中,使用位置变量来获取该位置的项目。

item = parent.getItemAtPostion(position).toString();

然后,当用户使用此微调器导航回视图时,您可以通过首先找到项目所在的位置(因为您在适配器中使用ArrayAdapter<CharSequence>)然后设置微调器的位置设置微调器从适配器所说的位置开始的位置。

String spinner=PreferenceManager
                 .getDefaultSharedPreferences(getBaseContext())
                 .getString("spinner","");
int position = adapter.getPosition(item);
spinner.setSelection(position);

答案 2 :(得分:0)

for循环和if条件之间没有有用的关系:

for(int i=0;i<9;i++)

if(spinner.equals(parent.getSelectedItem().toString())){
spinner.setSelection(parent.getItemAtPosition(position));

[应该使用循环中的“i”,如parent.getItemAtPosition(i).toString()]