0

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

目前,用户可以从微调控件上的选择中进行选择,这是通过 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
        }
        });

我喜欢并理解您查找匹配数组位置的方法 - 我可以澄清一下如何更改适配器(因为我目前似乎没有)。

4

3 回答 3

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)

于 2012-05-09T16:21:31.457 回答
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);
于 2012-05-09T18:05:33.923 回答
0

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

于 2012-05-09T16:19:54.073 回答