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

Java 是否使用1个微调器使用if函数和notifyDataSetChanged动态更改2个微调器?,java,android,if-statement,notifydatasetchanged,Java,Android,If Statement,Notifydatasetchanged,一般来说,对Java来说是相当陌生的。我的代码中有3个微调器,我的2个微调器将根据1个主微调器(有2个选择)显示列表。读了几篇文章后,我读到了关于使用notifySetDataChanged()刷新列表的内容;但微调器列表从未改变。几个问题: 我是否正确使用notifySetDataChanged 是否有其他方法填充列表 IF函数是合适的方法吗 下面是onCreate方法的代码 public class MainActivity extends Activity { private Spi

一般来说,对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, 
                                        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();

}`
公共类MainActivity扩展活动{
专用喷丝头1、喷丝头2、喷丝头3、喷丝头4;
私人按钮;
私人编辑文本来自;
private List list1=new ArrayList();
private List list2=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
from=(EditText)findViewById(R.id.amount);
//单元旋转器
喷丝头1=(喷丝头)findViewById(R.id.spinner1);
喷丝头2=(喷丝头)findViewById(R.id.spinner2);
喷丝头4=(喷丝头)findViewById(R.id.spinner4_main);
Listlist4=新的ArrayList();
清单4.添加(“距离”);
清单4.添加(“重量”);
//主秤适配器
ArrayAdapter dataAdapter4=新的ArrayAdapter(此,
android.R.layout.simple_微调器_下拉列表_项,列表4);
dataAdapter4.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
喷丝头4.设置适配器(数据适配器4);
//“from”货币的适配器
ArrayAdapter dataAdapter1=新的ArrayAdapter(此,
android.R.layout.simple_微调器_项,列表1);
dataAdapter1.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
喷丝头1.设置适配器(数据适配器1);
//“到”货币的适配器
ArrayAdapter dataAdapter2=新的ArrayAdapter(此,
android.R.layout.simple_微调器_项,列表2);
dataAdapter2.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
喷丝头2.设置适配器(数据适配器2);
对象选择=spinner4.getSelectedItemPosition();
如果(选择等于(“重量”)){
//换算单位
dataAdapter1.clear();
数据适配器1.添加(“毫克”);
数据适配器1.添加(“克”);
数据适配器1.添加(“千克”);
数据适配器1.添加(“公吨”);
//要转换为的单位
dataAdapter2.clear();
数据适配器2.添加(“毫克”);
数据适配器2.添加(“克”);
数据适配器2.添加(“千克”);
数据适配器2.添加(“公吨”);
}
else/(spinner4.getSelectedItem().toString().equals(“距离”))
{
//喷丝头1=(喷丝头)findViewById(R.id.spinner1);
dataAdapter1.clear();
数据适配器1.添加(“毫米”);
数据适配器1.添加(“厘米”);
数据适配器1.添加(“仪表”);
数据适配器1.添加(“公里”);
dataAdapter2.clear();
数据适配器2.添加(“毫米”);
数据适配器2.添加(“厘米”);
数据适配器2.添加(“仪表”);
数据适配器2.添加(“公里”);
}
dataAdapter1.notifyDataSetChanged();
dataAdapter2.notifyDataSetChanged();
}`
如果有人能解释问题所在,请告诉这位新手。=)

这不行。
getSelectedItemPosition()

返回一个
int
(),该值与中的
字符串不相等

if (choice.equals("Weight")
永远不要使用
对象
类作为参考,因为Java中的任何对象都是
对象
(duh!),所以你可能会将苹果和橙子(两者都是水果)进行比较。看起来你来自一种更弱类型的语言,是吗?;)

解决方案:比较位置:

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

另外,如果在
spinner4
上选择了某项内容,是否确实要更改
spinner1
的内容?

您的做法是错误的。下面是您应该做的

  • 定义微调器1、2和3
  • 为微调器1、2、3定义阵列适配器
  • 填充ArrayAdapter并将其定义为微调器1的适配器(spinner1.setadapter(arrayadapter1)
  • 然后调用spinner1.setOnItemSelectedListener。在方法onItemSelected中,根据需要填充逻辑以填充spinner2和spinner3的数组。然后调用spinner2.setadapter(arrayadapter2)和spinner3.setadapter(arrayadapter3)
  • 这应该行得通
  • 因此,最初,spinner2和spinner3将没有任何内容。即使用户单击,下拉列表中也不会有任何内容。但一旦用户选择Spinner1,spinner2和spinner3将有下拉值

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


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

    有没有更好的方法来更改spinner1的内容?或者我做错了什么
    if (spinnerX.getSelectedItemPosition == 0)...