我想用两个Spinners创建一个应用程序。当您选择第一个微调器内的一个项目时,第二个微调器将只获得几个项目(取决于所选的项目)。
例如:在第一个旋转器中,我选择"马自达",然后在第二个我只能看到马自达的车型,而不是宝马,福特等。我能做点什么吗?像这样?
我尝试创建一个没有项目的微调器,并在选择项目时在XML上设置微调器的条目,但是没有方法可以执行此操作。
我没有创建列表。我想在strings.xml中创建string-array
资源,并将该数组提供给第二个微调器。
答案 0 :(得分:0)
当然,这是可行的,非常简单。 Spinners与模型提供程序一起使用,在Android中它称为Adapter
模式。因此,您可以做的就是在您的第一个微调器中放置一个适用于您汽车所有品牌的适配器,并使用setOnItemSelectedListener
在第一个微调器上收听更改。
当项目发生更改时,您可以为第二个微调器创建一个新的适配器实例,其中只包含在这种情况下有效的值。
答案 1 :(得分:0)
尝试以下代码。我已经在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) {
}
});