简体   繁体   中英

Hide an Edittext or Spinner upon selecting option in another spinner

Basically I want to show only spinner or Edittext upon selecting a specific option in another spinner. There is a Spinner(@+id/selection) with two options as standard and custom. When user selects standard, Spinner(@+id/duration) should be visible below that. Just like that when user select custom, Edittext(@+id/custom_duration) should be visible in the next step. Always there should be only one option visible upon selecting a option in first spinner(@+id/selection). After some research I came close to a solution. But Im not sure how to proceed further. please help. This is my current code:

XML file

  <Spinner
                android:id="@+id/selection"
                android:layout_width="0dp"
                android:layout_height="45dp"
                android:layout_marginStart="25dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="32dp"
                android:entries="@array/selection"
                android:minWidth="140dp"
                android:padding="10dp"
                android:spinnerMode="dialog"

                />


            <Spinner
                android:id="@+id/duration"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="32dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="32dp"
                android:entries="@array/session_duration_labels"
                android:minWidth="140dp"
                android:padding="10dp"
                android:spinnerMode="dialog"/>

            <EditText
                android:id="@+id/custom_duration"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="32dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="32dp"
                android:minEms="6"
                app:layout_row="0"/>

Array list

<string-array name="selection">
    <item>Set the Type</item>
    <item>Standard</item>
    <item>Custom</item>
    </string-array>

sessionselection.java

public class StartSessionActivity extends AppCompatActivity implements View.OnClickListener{

    private Spinner spinner_session_selection;

    private Spinner spinner_session_duration;

    private EditText edit_custom_duration;

public void onCreate(@Nullable Bundle savedInstanceState) {

     spinner_session_selection = (Spinner) findViewById(R.id.selection);
    spinner_session_duration = (Spinner) findViewById(R.id.duration);
    edit_custom_duration = (EditText) findViewById(R.id.custom_duration);
        setupSpinners();

}
 void setupSpinners(){
        spinner_session_selection.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if (position == 1) {
                    edit_custom_duration.setVisibility(View.GONE);
                } else {
                    edit_custom_duration.setVisibility(View.VISIBLE);
                }


            }

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

            }

        });

        spinner_session_selection.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // put your code here for weight spinner
                if (position == 2) {
                    spinner_session_duration.setVisibility(View.GONE);
                } else {
                    spinner_session_duration.setVisibility(View.VISIBLE);
                }

            }

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

            }
        });
    }

}

You don't need to set listener twice to same spinner. You instead can check two different conditions in same listener, Keep only one listener and remove another one. change your code as follows.

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

            if (position == 1) {
                edit_custom_duration.setVisibility(View.GONE);
            } else {
                edit_custom_duration.setVisibility(View.VISIBLE);
            }

            if (position == 2) {
                spinner_session_duration.setVisibility(View.GONE);
            } else {
                spinner_session_duration.setVisibility(View.VISIBLE);
            }


        }

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

        }

    });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM