如何在下拉菜单中设置位置?

28

我使用 BufferedReader 从系统文件中读取文本;这个文本包含了比如说 5 个单词,但是在其他情况下也可能包含更少或更多的单词。然后,我将这些单词放入一个字符串中,并将该字符串保存到共享首选项。最后,我使用这个字符串创建了一个下拉菜单。

代码如下:
Spinner spinner = new Spinner(this);
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, yourString.split(" "));
    spinner.setAdapter(spinnerArrayAdapter);

然后我从另一个文件中读取文本。这段文本总是包含一个单词。而且这个单词和我从第一个文件中读取的某个单词相同(例如,如果我从第一个文件中读取了5个单词,其中一个单词是"black",那么我从第二个文件中读取的也会包含"black")。我需要将这个特定的单词(存在于两个文件中)作为我的下拉列表中默认选中的选项。

例如:

第一个字符串包含:红色、蓝色、黄色、黑色、白色

第二个字符串包含:黄色

我用第一个字符串创建一个下拉列表,选项与字符串中的内容完全一致:"红色、蓝色、黄色、黑色、白色",默认选中的选项是红色(因为它恰好是第一个),但是在这种情况下我需要将黄色设置为默认选中的选项,因为第二个字符串包含"黄色"。这两个字符串中的单词总是不同的。

顺便说一下:我知道如何保存下拉列表中的位置,但我不知道如何在比较两个字符串并且其中一个包含更多单词的情况下设置下拉列表中的位置。

3个回答

63

这是一个解决方案,感谢 sfratini 的帮助。

使用:

spinner.setSelection(getIndex(spinner, myString));

那么:

private int getIndex(Spinner spinner, String myString){

        int index = 0;

        for (int i=0;i<spinner.getCount();i++){
            if (spinner.getItemAtPosition(i).equals(myString)){
                index = i;
            }
        }
        return index;
}

2
你可以进行优化,当找到时直接返回索引。这样可以节省一个变量和一些迭代。但前提是这符合你的使用情况。(当前返回第一个匹配项,而不是最后一个) - AlbAtNf

15

我认为这行代码会对你有所帮助

 String[] a= new String[10];
 a[0]="abc";
 a[1]="xyz";
 a[2]="pqr";
 .....
 .....
 spin = (Spinner) findViewById(R.id.TimeSpinner);
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(TimeSpin.this, android.R.layout.simple_spinner_item, a);  
   adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)‌​;  
   spin.setAdapter(adapter); 
   spin.setSelection(0);

不,我只需要设置位置,但这是另一种情况,首先我从一个文件中读取文本(例如,这个文本包含5个单词,第三个单词是“黑色”),然后将这5个单词保存到一个字符串中。然后按照您的建议从此字符串创建一个下拉列表。然后我从另一个文件中读取文本,该文本始终包含与第一个文件中的一个单词相同的单词(例如,第二个文件包含“黑色”),然后将此单词保存到字符串中。现在我需要将“黑色”设置为我的下拉列表中的默认位置。你明白我的意思吗? - Adam
你不能将字符串设置为Spinner的默认值。 - Harsh Trivedi
第一个字符串包含5个单词,我将从这个字符串创建一个下拉菜单。第二个字符串包含一个单词(与第一个字符串中的一个单词相同),我需要将这个单词作为下拉菜单的默认选项。 - Adam
如果第二个字符串包含“blue”,当我打开我的活动时,我希望默认选择蓝色作为我的下拉列表中的选项。但是,如果第二个字符串包含“red”,当我打开我的活动时,我希望默认选择红色作为我的下拉列表中的选项。 - Adam
好的,那么您需要将此选定的字符串保存在共享首选项中,在加载活动时,您需要从Sharedpreferences获取字符串并添加到一个数组中,然后按照我的上面的答案操作,您的问题将得到解决。 - Harsh Trivedi
显示剩余7条评论

7
你无需使用适配器(Adapter)...只需要将字符串数组转换为列表(List),然后使用indexOf(Object object)函数获取你所选颜色的选项卡索引。
String [] strings = yourString.split(" ");
List<String> strList = new ArrayList<String>(Arrays.asList(strings));
//Or you can load array from xml...
//List<String> strList2 = Arrays.asList(getResources().getStringArray(R.array.array_color));
spinner.setSelection(strList.indexOf("colorvalue"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接