使用1个微调器使用if函数和notifyDataSetChanged动态更改2个微调器?

时间:2014-12-02 20:29:55

标签: java android if-statement notifydatasetchanged

一般来说,Java很新。我的代码中有3个Spinners,我的2个微调器将根据1个主旋转器(有2个选项)显示列表。在阅读了几个线程后,我读到了使用notifySetDataChanged()刷新列表的问题。但是微调器列表从未改变过。几个问题:

  • 我是否正确使用了notifySetDataChanged?
  • 是否有其他方法可以填充列表?
  • IF功能是否适用?

这是onCreate方法的代码。

public class MainActivity extends Activity {

private Spinner spinner1, spinner2, spinner3, spinner4;
private Button convertButton;
private EditText from;
private List <String> list1 = new ArrayList<String>();
private List <String> list2 = new ArrayList<String>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    from = (EditText) findViewById(R.id.amount);



  //spinners for units
    spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner2 = (Spinner) findViewById(R.id.spinner2);
    spinner4 = (Spinner) findViewById(R.id.spinner4_main);
    List<String>list4 = new ArrayList<String>();

    list4.add("Distance");
    list4.add("Weight");

    //adapter for main scale
   ArrayAdapter<String> dataAdapter4 = new ArrayAdapter <String> (this, 
                                        android.R.layout.simple_spinner_dropdown_item, list4);
            dataAdapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner4.setAdapter(dataAdapter4);

    //adapter for "from" currency
    ArrayAdapter<String> dataAdapter1 = new ArrayAdapter<String>(this,
                                        android.R.layout.simple_spinner_item, list1);
            dataAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner1.setAdapter(dataAdapter1); 

     //adapter for "to" currency       
            ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this,
                                                android.R.layout.simple_spinner_item, list2);
            dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner2.setAdapter(dataAdapter2);


    Object choice = spinner4.getSelectedItemPosition();
   if (choice.equals("Weight")) {
    //units to convert from
    dataAdapter1.clear();
    dataAdapter1.add("Milligrams");
    dataAdapter1.add("Grams");
    dataAdapter1.add("Kilograms");
    dataAdapter1.add("Metric Ton");




    //units to convert to
    dataAdapter2.clear();
    dataAdapter2.add("Milligrams");
    dataAdapter2.add("Grams");
    dataAdapter2.add("Kilograms");
    dataAdapter2.add("Metric Ton");


   }


   else //(spinner4.getSelectedItem().toString().equals("Distance"))
       {

       //spinner1 = (Spinner) findViewById(R.id.spinner1);
       dataAdapter1.clear();
       dataAdapter1.add("Millimeter");
       dataAdapter1.add("Centimeter");
       dataAdapter1.add("Meter");
       dataAdapter1.add("Kilometer");





       dataAdapter2.clear();
       dataAdapter2.add("Millimeter");
       dataAdapter2.add("Centimeter");
       dataAdapter2.add("Meter");
       dataAdapter2.add("Kilometer");



   }

   dataAdapter1.notifyDataSetChanged();
    dataAdapter2.notifyDataSetChanged();

}`

如果有人能解释什么是错的,请启发这个新手。 =)

2 个答案:

答案 0 :(得分:0)

  Object choice = spinner4.getSelectedItemPosition();

这不起作用。 getSelectedItemPosition()

返回intdocumentation),与

中的String不等
if (choice.equals("Weight")

从来没有(除了在极少数情况下)使用Object类作为参考,因为Java中的任何对象都是Object(呃!)所以你可能比较苹果和橙子(哪两个都是水果)。好像你是来自一种更弱的类型语言,嗯? ;)

解决方案:比较职位:

if (spinnerX.getSelectedItemPosition == 0)...

此外,如果在spinner1上选择了某些内容,您确定要更改spinner4的内容吗?

答案 1 :(得分:0)

你正在接近这个错误。这是你应该做的..

  1. 定义微调器1,2和3.
  2. 为微调器1,2,3定义arrayAdapters。
  3. 填充ArrayAdapter并将其定义为Spinner 1的适配器(spinner1.setadapter(arrayadapter1)
  4. 然后调用spinner1.setOnItemSelectedListener。在onItemSelected方法中,填充逻辑以根据您的要求为spinner 2和spinner 3填充数组。然后调用spinner2.setadapter(arrayadapter2)和spinner3.setadapter(arrayadapter3)。
  5. 这应该有用。
  6. 所以最初,spinner2和spinner3将没有任何内容。即使用户点击,下拉列表中也没有任何内容。但是一旦用户选择了Spinner1,spinner2和spinner3就会有下拉值。

    请阅读setOnItemSelectedListener。有很多教程可供选择。您可以参考here开始。

    如果这适合您,请接受我的回答。