1

我的活动中有 2 个微调器作为类别和子类别。当我从类别微调器中选择一些值时,我想在子类别微调器中显示其相关值/数据。我该怎么做?

   public class SellActivity extends Activity {
 private Spinner spinner1, spinner2;
 private String selectedOption;
 List<String> addItemList = new ArrayList<String>();
 String[] elCat = new String[] {"Mobile", "Television", "Computers","Home Appliances","Games","Others"}; 
 String[] veCat = new String[] {"Cars", "Buses", "Motorcycles","Others"}; 
 String[] reCat = new String[] {"Apartment", "Plot", "Office","Paying Guest","Others"}; 
 String[] hCat = new String[] {"Books", "Furniture", "Musical Instrument","Watches","Others"}; 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sell);
    spinner1 = (Spinner) findViewById(R.id.categorySellSpinner);
    spinner2 = (Spinner) findViewById(R.id.subCategorySpinner);
    selectedOption=String.valueOf(spinner1.getSelectedItem());
    System.out.println(selectedOption);
    spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub
            if(selectedOption.equals("Electronics"))
            {
                Collections.addAll(addItemList, elCat); 
                ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(SellActivity.this,android.R.layout.simple_spinner_item, addItemList);
                dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                dataAdapter.notifyDataSetChanged();
                spinner2.setAdapter(dataAdapter);
            }
            else if(selectedOption.equals("Home - Lifestyle"))
            {
                Collections.addAll(addItemList, hCat); 
                ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(SellActivity.this,android.R.layout.simple_spinner_item, addItemList);
                dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                dataAdapter.notifyDataSetChanged();
                spinner2.setAdapter(dataAdapter);
            }
            else if(selectedOption.equals("Vehicles"))
            {
                Collections.addAll(addItemList, veCat); 
                ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(SellActivity.this,android.R.layout.simple_spinner_item, addItemList);
                dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                dataAdapter.notifyDataSetChanged();
                spinner2.setAdapter(dataAdapter);
            }
            else if(selectedOption.equals("Real Estate"))
            {
                Collections.addAll(addItemList, reCat); 
                ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(SellActivity.this,android.R.layout.simple_spinner_item, addItemList);
                dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                dataAdapter.notifyDataSetChanged();
                spinner2.setAdapter(dataAdapter);
            }
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

        }
    });

}

}

这是整个代码。数据没有改变......加上旧数据添加到它上面

4

4 回答 4

2

在每个 if 条件下都这样做:-

Collections.addAll(addItemList, elCat);
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String(this,android.R.layout.simple_spinner_item, addItemList);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
dataAdapter.notifyDataSetChanged();
spinner2.setAdapter(dataAdapter);
于 2013-07-29T11:42:00.803 回答
2

你的代码有很多问题:

-- 数据spinner1丢失。从您的代码中,它应该是:{"Electronics", "Home - Lifestyle", "Vehicles","Real Estate"}

--spinner1没有设置适配器

addItemList--不需要创建和使用列表

--selectedOption不需要检查所选项目的使用。onItemClick()给你选择的项目int arg2

-- 对未设置为任何视图的适配器调用 notifyDataSetChanged() 不会执行任何操作。

-- 数组可以直接传递给 ArrayAdapters,无需将它们转储到 ArrayList

于 2013-07-29T12:24:54.733 回答
2

旧数据正在添加,因为您没有清除要传递给适配器的集合,只需在将新数据添加到其中之前清除集合的内容。

尝试这个 :-

    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1,
            int arg2, long arg3) {
        // TODO Auto-generated method stub


        addItemList.clear();
        spinner2.setAdapter(null);


        if(selectedOption.equals("Electronics"))
        {
            Collections.addAll(addItemList, elCat); 
于 2013-07-29T12:08:48.770 回答
0

在 if 语句之前进入 onItemSelected 后尝试重新初始化 addItemList ..

于 2013-07-29T12:12:36.917 回答