如何将标识符附加到微调器项目



我有一个微调器,它包含语言选项,其项根据系统语言从字符串资源中命名。我需要一个类似于这些语言的标识符的东西附在每个项目上。例如,我需要知道用户选择了";英语";作为一个选项(或者"en",如果我们谈论的是标识符(,即使当他选择它时,他选择了"en";Englisch";(如果用户是德国人(。那么,如何将这些类型的标识符附加到数组列表项中呢?

我建议创建一个简单的类来保存所需的数据。

public class Language {
private String identifier;
private String name; //localised name 
...
//we want to show the localised data in the spinner
@Override
public String toString() { 
return name;
}

然后只需制作一个简单的ArrayAdapter并覆盖微调器的onItemSelected函数,或者随时获取所选项目

List listWithLanguages = getLanguages();
ArrayAdapter<Language> adapter = new ArrayAdapter<>(this, R.layout.spinner_item, listWithLanguages);
spinner.setAdapter(adapter)
...
String identifier = (Language) spinner.getSelectedItem().getIdentifier();

您可以将字符串数组项视为标识符。并且可以使用从设置监听器中获取所选项目

AdapterView.OnItemSelectedListener

public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
You can retrieve the selected item using
// parent.getItemAtPosition(pos)
}

使用一个封装您关心的信息的自定义适配器,然后不构建一个创建本地化字符串列表的适配器,而是创建一个创建具有标识符和本地化字符串的对象列表的适配器。

Kotlin伪码:

val strings = loadLocalizedStringsFromArrayItems()
val identifiers = loadIndentifierStringsFromArrayItems()
val listOfPairs = identifiers.zip(string)
val adapter = ArrayAdapter<List<Pair<String, String>>>(listOfPairs)
val spinner.setAdapter(adapter)
// When clicking on the spinner item:
val pair = adapter.getItemAtPosition(clickedPosition)
val identifier = pair.first
val localizedString = pair.second

最新更新