重新加载Spinner时显示先前选择的答案

时间:2012-05-09 16:13:39

标签: java android android-spinner

我正在寻找一种方法来在重新加载微调器时显示先前选择的答案。

目前,用户可以从微调控件上的选择中进行选择,这是通过XML文件设置的。然后将该选择写入SQLite数据库 - 这与特定作业有关。

当我将所需作业的数据重新加载到我的应用程序中时,问题出现了 - 我希望微调器能够立即显示从数据库中加载的先前选择的响应。

有人能指出我在正确的地方找出如何更改微调器中第一个显示的项目吗?

编辑:添加了我到目前为止的Spinner代码。

// Terrain Spinner

        Spinner s = (Spinner) findViewById(R.id.spinnerTerrain);

        //I think it is here i need to implement the suggested answer

        s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){

        @Override
        public void onItemSelected(AdapterView<?> adapter, View v, int i, long lng) {
            Property.terrain = adapter.getItemAtPosition(i).toString();

        }

        @SuppressWarnings("rawtypes")
        @Override
        public void onNothingSelected(AdapterView arg0) {
        //do something else
        }
        });

我喜欢并理解你找到匹配数组位置位置的方法 - 我可以做一些关于如何改变适配器的澄清(因为我现在似乎没有)。

3 个答案:

答案 0 :(得分:1)

我认为您需要在Spinner适配器中设置适配器的位置。 theSpinnerAdapter.setSelection(someIntegerIndicatingPosition);

要获得该位置,您可能需要在ArrayList中进行查找,假设它是您的微调器的来源,找到该项并抓住它的位置。像这样:

public int FindPositionOfItem(String itemValue)
{
    int itemPosition = 0;

    //Loop through each item in the list of spinner items
    for(String itemInList: allSpinnerItems)
    {
        //Check if the current item matches the item retrieved from the database
        if(itemInList.equals(itemValue))
        {
            break;
        }

        itemPosition++;
    }

    return result;
}

然后,从数据库中获取值后,只需将其传递给该方法即可获得该位置。

int positionOfSelectedItem = FindPositionOfItem(valueCapturedFromDB);
theSpinnerAdapter.setSelection(positionOfSelectedItem);

编辑:如果您使用ArrayAdapter作为Spinner适配器,我认为您可以int position = adapter.getPosition(stringRetrievedFromDatabase)

答案 1 :(得分:0)

您可以在数据库中添加previouslySelected列,然后ORDER BY该字段,以便将之前选择的答案显示在列表顶部。

答案 2 :(得分:0)

我完全不理解你的问题,但我想你只需要在数据库中获得之前选择的项目后立即在微调器上选择项目,这是对的吗?

如果是这样,你可以改进类似的东西:

        Spinner s = ...;
        Cursor c = getPreviouslySelectedItemFromDatabase();
        if (c != null && c.moveToFirst()) {
            String property = c.getString(c.getColumnIndexOrThrow("previous_item")); // That's the column on the db
            c.close();

            final int count = s.getAdapter().getCount();
            for (int index = 0; index < count; count++) {
                String value = (String) s.getAdapter().getItem(index);
                if (TextUtils.equals(value, property)) {
                    s.setSelection(index);
                    break;
                }
            }
        }

如果您只想在UI中保留微调器状态,请看一下:

        Spinner s = ...;
//After selected
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
        SharedPreferences.Editor editor = settings.edit();
        editor.putInt(PREF_LAST_SELECTED_POS, s.getSelectedItemPosition());
        editor.commit();
//-----------------     
//At the moment you want to retain the state of the spinner 
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
        int position = settings.getInt(PREF_LAST_SELECTED_POS, 0);

        s.setSelection(position);