Home > Back-end >  How to get multiple Spinner value?
How to get multiple Spinner value?

Time:10-21

I have a Fragment with 12 Spinners and I don't need to perform any action until the user click on a button.

All my Spinners looks like this.(Showing only 2)

 <Spinner
    android:id="@ id/spinnerP1Type"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    style="@style/spinner_style"
    android:entries="@array/powerTypes"
    android:gravity="top"
    />
 <Spinner
    android:id="@ id/spinnerP2Type"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    style="@style/spinner_style"
    android:entries="@array/powerTypes"
    android:gravity="top"
    />

All of them have pretty similar name, and there's no other spinners. Is possible to process them in a loop instead of creating one new object by each one?

Spinner SpinP1 = getView().findViewById(R.id.spinnerP1Type);
Spinner SpinP2 = getView().findViewById(R.id.spinnerP2Type);

CodePudding user response:

Wrap all the spinners in a ViewGroup (use either LinearLayout or ConstraintLayout) and then when the button is clicked, run a for loop and call getChildAt(loopIndex) on that ViewGroup. The ViewGroup should already have been instantiated with findViewById(R.id.the_container_name)

The code below

<LinearLayout
     android:id="@ id/spinner_container"
     android:orientation="vertical"
     `...` >

    <Spinner
        android:id="@ id/spinnerP1Type"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="@style/spinner_style"
        android:entries="@array/powerTypes"
        android:gravity="top"
        />
     <Spinner
        android:id="@ id/spinnerP2Type"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="@style/spinner_style"
        android:entries="@array/powerTypes"
        android:gravity="top"
        />

</LinearLayout>

Then call:

        Linearlayout container = getView().findViewById(R.id.spinner_container);
        
        for(int i = 0; i < container.getChildCount(); i  ) {
          View child = container.getChildAt(i);
          if ( child instanceof Spinner) {
          Spinner spinner = (Spinner) child;
          spinner.setOnItemSelectedListener(new SimpleOnItemSelectedListener();

} }

/**
 * Listener
 */
public class SimpleOnItemSelectedListener implements AdapterView.OnItemSelectedListener {

   @Override
   public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

   }

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

   }
}

Note: SimpleOnItemSelectedListener implements AdapterView.OnItemSelectedListener

CodePudding user response:

One possibility is to create an array of ids to loop over:

int[] spinnerIds = new int[] {R.id.spinnerP1Type, R.id.spinnerP1Type);

for (int spinnerId : spinnerIds) {
    Spinner spinner = getView().findViewById(spinnerId);
    // etc.
}
  • Related