我想用两个微调器创建一个应用程序。当您选择第一个微调器内的其中一个项目时,第二个微调器将只获得几个项目(取决于所选的项目)。触发其他微调器的微调器
例如:在第一个微调器中,我选择“马自达”,然后第二个我将只能看到马自达的车型,而不是宝马,福特等。我可以做这样的事情吗?
我试图创建无项微调,并设置项目选择时的XML微调的项目,但目前还没有方法做到这一点。
我不创建列表。我想在我的strings.xml中创建string-array
资源,并将该数组赋予第二个微调器。
我想用两个微调器创建一个应用程序。当您选择第一个微调器内的其中一个项目时,第二个微调器将只获得几个项目(取决于所选的项目)。触发其他微调器的微调器
例如:在第一个微调器中,我选择“马自达”,然后第二个我将只能看到马自达的车型,而不是宝马,福特等。我可以做这样的事情吗?
我试图创建无项微调,并设置项目选择时的XML微调的项目,但目前还没有方法做到这一点。
我不创建列表。我想在我的strings.xml中创建string-array
资源,并将该数组赋予第二个微调器。
当然这是可行的,非常简单。 Spinners与模型提供商合作,在Android中它被称为Adapter
模式。所以你可以做的就是在你的第一个微调器中放入一个适配器,它可以容纳你的汽车的所有品牌,并使用setOnItemSelectedListener
倾听第一个微调器的变化。
当物品的变化,您可以与在这种情况下有效的值只有第二微调创建一个新的适配器实例。
但是如果我想要从strings.xml添加到第二个微调器
那么,如果你将所有的数据硬编码到字符串中,那么应该很容易根据第一个微调器来决定哪个字符串数组。 – droidpl
第一个微调不是问题,第二个微调是问题,因为微调获取带有entries元素的字符串数组,但是当我想更新第二个微调时,我不能...... –
请尝试下面的代码。我已经在HashMap中组织了示例数据,但您可以用自己的方式来完成。
// hashmap object containing data of spinner1 as 'keys' with relevant
// data of spinner2 in List<String> object as 'values'
final Map<String, List<String>> data = new HashMap<>();
data.put("A", Arrays.asList("1","2","3","4"));
data.put("B", Arrays.asList("4", "5"));
data.put("C", Arrays.asList("6", "7", "8", "9"));
data.put("D", Arrays.asList("10", "11", "12"));
data.put("E", Arrays.asList("13", "14"));
// obtaining a string array containing keys(data of spinner1) of above hashmap
final String[] dataSpinner1 = new String[data.keySet().size()];
data.keySet().toArray(dataSpinner1);
// initializing an string type, ArrayAdapter for spinner1
// you will need to pass activity context, layout for the spinner item and
// spinner content(as string array) as arguments to create an array adapter
final ArrayAdapter<String> spinner1Adapter = new ArrayAdapter<String>(context, R.layout.spinner_layout, dataSpinner1);
spinner1.setAdapter(spinner1Adapter);
// setting listner for spinner1 to trigger when an spinner item is being
// clicked by the user
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// obtaining relevant data for spinner2
List<String> dataSpinner2 = data.get(dataSpinner1[position]);
// crating an setting array adapter for spinner2
ArrayAdapter<String> spinner2Adapter = new ArrayAdapter<String>(context, R.layout.spinner_layout, dataSpinner2);
spinner2.setAdapter(spinner2Adapter);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
问题是我正在制作多语言应用程序,这意味着我需要所有的字符串在'strings.xml'中,而不是在java代码中.....那是什么让我困扰.... –
[基于另一种微调选择更改微调]的可能的复制(http://stackoverflow.com/questions/28702174/change-spinner-based-on-another-spinner-selection) –