有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

一般来说,对Java来说都很陌生。我的代码中有3个微调器,我的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, 
                                        安卓.R.layout.simple_spinner_dropdown_item, list4);
            dataAdapter4.setDropDownViewResource(安卓.R.layout.simple_spinner_dropdown_item);
            spinner4.setAdapter(dataAdapter4);

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

     //adapter for "to" currency       
            ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this,
                                                安卓.R.layout.simple_spinner_item, list2);
            dataAdapter2.setDropDownViewResource(安卓.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) 个答案

  1. # 1 楼答案

    你走错了路。这是你应该做的

    1. 定义微调器1、2和3
    2. 为微调器1、2、3定义阵列适配器
    3. 填充ArrayAdapter并将其定义为微调器1的适配器(spinner1.setadapter(arrayadapter1)
    4. 然后给喷丝头打电话。SetonimselectedListener。在选择的方法中,根据需要填充逻辑以填充微调器2和微调器3的阵列。然后打电话给spinner2。设置适配器(arrayadapter2)和喷丝头3。设置适配器(arrayadapter3)
    5. 这应该行得通

    所以最初,spinner2和spinner3将没有任何内容。即使用户点击,下拉列表中也不会出现任何内容。但一旦用户选择Spinner1,spinner2和spinner3将具有下拉值

    请仔细阅读SetonimSelectedListener。有很多教程。你可以参考here开始

    如果这对你有效,请接受我的回答

  2. # 2 楼答案

      Object choice = spinner4.getSelectedItemPosition();
    

    这行不通。 getSelectedItemPosition()

    返回一个intdocumentation),它将不等于中的String

    if (choice.equals("Weight")
    

    永远不要(除非在极少数情况下)使用Object类作为引用,因为Java中的任何对象都将是Object(duh!)所以你可能会把苹果和橙子(两者都是水果)进行比较。看起来你来自一种更弱类型的语言,是吗?;)

    解决方案:比较位置:

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

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