2015-10-04 53 views
1

我想用两个微调器创建一个应用程序。当您选择第一个微调器内的其中一个项目时,第二个微调器将只获得几个项目(取决于所选的项目)。触发其他微调器的微调器

例如:在第一个微调器中,我选择“马自达”,然后第二个我将只能看到马自达的车型,而不是宝马,福特等。我可以做这样的事情吗?

我试图创建无项微调,并设置项目选择时的XML微调的项目,但目前还没有方法做到这一点。

我不创建列表。我想在我的strings.xml中创建string-array资源,并将该数组赋予第二个微调器。

+0

[基于另一种微调选择更改微调]的可能的复制(http://stackoverflow.com/questions/28702174/change-spinner-based-on-another-spinner-selection) –

回答

0

当然这是可行的,非常简单。 Spinners与模型提供商合作,在Android中它被称为Adapter模式。所以你可以做的就是在你的第一个微调器中放入一个适配器,它可以容纳你的汽车的所有品牌,并使用setOnItemSelectedListener倾听第一个微调器的变化。

当物品的变化,您可以与在这种情况下有效的值只有第二微调创建一个新的适配器实例。

+0

但是如果我想要从strings.xml添加到第二个微调器,我该怎么做? –

+0

那么,如果你将所有的数据硬编码到字符串中,那么应该很容易根据第一个微调器来决定哪个字符串数组。 – droidpl

+0

第一个微调不是问题,第二个微调是问题,因为微调获取带有entries元素的字符串数组,但是当我想更新第二个微调时,我不能...... –

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) { 

     } 
    }); 
+0

问题是我正在制作多语言应用程序,这意味着我需要所有的字符串在'strings.xml'中,而不是在java代码中.....那是什么让我困扰.... –