-1

I have nine spinners with same function, input value to int array.

So, I wrote code with 'for' Loop. I thought that's effective. But it didn't work.

When I execute this and check spinner, there's no change of int array.

How can I input value to int array with 'for' Loop?

//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

        }
    });
}
Johannes Lee
  • 21
  • 1
  • 9

2 Answers2

1

The reason this is not working

values[num] = position;

The num value is 9 always when the event listener triggers.

You could create an inner class implementing the listener interface, with an index varible assigned on constructor, like this:

    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) {

    }
}

And use it like this:

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

Try this....

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. Result

Data Binding Implement OnItemSelectedListener

Nimantha
  • 6,405
  • 6
  • 28
  • 69
Silambarasan Poonguti
  • 9,386
  • 4
  • 45
  • 38