我无法通过 'for' 循环在微调器数组中设置 onItemSelectedListener

I can't set onItemSelectedListener in spinner array by 'for' Loop

我有九个具有相同功能的微调器,输入值到 int 数组。

所以,我用 'for' 循环编写了代码。我以为那是有效的。但是没用。

当我执行它并检查微调器时,int 数组没有变化。

如何使用 'for' 循环将值输入到 int 数组?

//global
int num;

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_spinner_item, items);
spinner[] spinner;
spinner = new Spinner[9];
int[] values;
values = new int[9];

for(int i = 0; i < 9; i++){
    spinner[i] = new Spinner(this);
    spinner[i] = (Spinner) findViewById(spinnerId[i]);
    spinner[i].setAdapter(adapter);
    values[i] = 0;
}       

//OnItemSelectedListener
for(int i = 0; i < 9; i++){
    num++;
    spinner[i].setOnItemSelectedListener(new
        AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent,
                View view, int position, long id) {
            values[num] = position;
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub

        }
    });
}

这不起作用的原因

values[num] = position;

事件侦听器触发时,num 值始终为 9。

您可以创建一个内部 class 实现侦听器接口,并在构造函数上分配一个索引变量,如下所示:

    private class IndexedItemSelectedListener implements AdapterView.OnItemSelectedListener {

    private final int index;

    public IndexedItemSelectedListener(int index) {
        this.index = index;
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        values[index] = position;
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
}

并像这样使用它:

        //OnItemSelectedListener
    for (int i = 0; i < spinner.length; i++) {
        spinner[i].setOnItemSelectedListener(new IndexedItemSelectedListener(i));
    }

试试这个....

1. activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

   <LinearLayout
       android:id="@+id/spinner_container"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerInParent="true"
       android:orientation="vertical"/>

   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Dynamic Spinner"
       android:id="@+id/textView3"
       android:textColor="#000000"
       android:textSize="18sp"
       android:layout_alignParentTop="true"
       android:layout_centerHorizontal="true"
       android:layout_marginTop="64dp" />

</RelativeLayout>

2.MainActivity.java

public class MainActivity extends AppCompatActivity {

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

    GenerateView();
}


private void GenerateView() {

    mContainer = (LinearLayout)findViewById(R.id.spinner_container);
    LinearLayout.LayoutParams mRowLayoutParams = new LinearLayout.LayoutParams(TableRow.LayoutParams.MATCH_PARENT,
            TableRow.LayoutParams.WRAP_CONTENT);
    mRowLayoutParams.gravity = Gravity.CENTER_HORIZONTAL;
    mRowLayoutParams.setMargins(8, 8, 8, 8);

    String[] ITEMS = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6"};
    ArrayAdapter<String> adapter0 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ITEMS);
    adapter0.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    for (int i = 0; i < 9; i++) {
        Spinner spinner = new Spinner(this);
        spinner.setId(i);
        spinner.setAdapter(adapter0);
        spinner.setOnItemSelectedListener(mOnItemSelectedListener);
        spinner.setLayoutParams(mRowLayoutParams);
        mContainer.addView(spinner);
    }

}

private AdapterView.OnItemSelectedListener mOnItemSelectedListener = new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        Spinner spinner = (Spinner) parent;

        switch (spinner.getId()) {
            case 0:
                shpwToast(spinner.getSelectedItem().toString());
                break;
            case 1:
                shpwToast(spinner.getSelectedItem().toString());
                break;
            case 3:
                shpwToast(spinner.getSelectedItem().toString());
                break;
            case 4:
                shpwToast(spinner.getSelectedItem().toString());
                break;
            case 5:
                shpwToast(spinner.getSelectedItem().toString());
                break;
            case 6:
                shpwToast(spinner.getSelectedItem().toString());
                break;
            case 7:
                shpwToast(spinner.getSelectedItem().toString());
                break;
            case 8:
                shpwToast(spinner.getSelectedItem().toString());
                break;
            case 9:
                shpwToast(spinner.getSelectedItem().toString());
                break;
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
  };

  private void shpwToast(String content) {
    Toast.makeText(MainActivity.this, "Item Selected : " + content, Toast.LENGTH_SHORT).show();
   }

  }

3。结果