使用 1 个微调器动态更改 2 个微调器,其中包含 if 函数并通知数据集已更改


总的来说,

Java是相当新的。我的代码中有 3 个微调器,我的 2 个微调器将根据 1 个主微调器(有 2 个选择)显示列表。在阅读了一些线程后,我阅读了有关使用 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();
}`

如果有人可以解释出了什么问题,请启发这个新手。 =)

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

  1. 定义微调器 1、2 和 3。
  2. 定义微调器 1,2,3 的 array适配器。
  3. 填充 ArrayAdapter 并将其定义为微调器 1 (spinner1.setadapter(arrayadapter1) 的适配器
  4. 然后调用微调器1.setOnItemSelectedListener。在方法 onItemSelected 中,填充逻辑以根据需要填充微调器 2 和微调框 3 的数组。然后调用 spinner2.setadapter(arrayadapter2) 和 spinner3.setadapter(arrayadapter3)。
  5. 这应该有效。

因此,最初,微调器2和微调器3将没有任何内容。 即使用户单击,下拉列表中也不会有任何内容。但是,一旦用户选择了微调器1,微调器2和微调器3将具有下拉值。

请阅读setOnItemSelectedListener。有很多教程可用。 您可以参考此处开始。

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

  Object choice = spinner4.getSelectedItemPosition();

这是行不通的。 getSelectedItemPosition()

返回一个int(文档),它不等于您的String

if (choice.equals("Weight")

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

解决方案:比较位置:

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

另外,如果选择了某些内容,您是否确定要更改spinner1的内容spinner4

最新更新