Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重新加载微调器时显示以前选择的答案_Java_Android_Android Spinner - Fatal编程技术网

Java 重新加载微调器时显示以前选择的答案

Java 重新加载微调器时显示以前选择的答案,java,android,android-spinner,Java,Android,Android Spinner,我正在寻找一种在重新加载微调器时显示以前选择的答案的方法 目前,用户可以从微调器控件上的选择中进行选择,这是通过XML文件设置的。然后将该选择写入SQLite数据库-这与特定作业相关 当我将所需作业的数据重新加载回我的应用程序时,我的问题就来了——我希望微调器立即显示从数据库加载回的先前选择的响应 有人能告诉我正确的位置,以了解如何更改微调器中显示的第一个项目吗 编辑:添加了迄今为止我所拥有的微调器代码 // Terrain Spinner Spinner s = (Spinn

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

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

当我将所需作业的数据重新加载回我的应用程序时,我的问题就来了——我希望微调器立即显示从数据库加载回的先前选择的响应

有人能告诉我正确的位置,以了解如何更改微调器中显示的第一个项目吗

编辑:添加了迄今为止我所拥有的微调器代码

// 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
        }
        });
//地形微调器
微调器s=(微调器)findViewById(R.id.spinnerTerrain);
//我认为我需要在这里实施建议的答案
s、 setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共通道(适配器视图适配器、视图v、内部i、长lng){
Property.terrain=adapter.getItemAtPosition(i).toString();
}
@抑制警告(“原始类型”)
@凌驾
未选择公共无效(AdapterView arg0){
//做点别的
}
});

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

您可以在数据库中添加以前选择的
列,然后,
该字段排序,以获得先前选择的答案,并显示在列表顶部。

我认为您需要设置适配器在微调器适配器中的位置
theSpinnerAdapter.setSelection(某些整数指示位置)

要获得位置,您可能需要在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作为微调器适配器,我认为您可以只做
int position=Adapter.getPosition(stringRetrievedFromDatabase)
我对您的问题不是很了解,但是我假设您只想在从数据库中获取之前选择的项之后,在微调器中选择该项,对吗

如果是这样的话,您可以在类似的方面进行改进:

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

嗨,奥斯汀-对不起,我的解释不够清楚。真正的问题是如何获得微调器上显示的变量-我很高兴如何检索数据。戈弗莫尔已经理解了我试图解释的内容。现在我只是不确定我应该如何在我的代码中实现他的答案(作为编辑添加)告诉我们如何收集源数据(微调器中列出的内容),然后我可以告诉您如何在代码中实现我的答案。
        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);