简体   繁体   English

在另一个微调器中选择选项时隐藏Edittext或Spinner

[英]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. 基本上我想在另一个微调器中选择一个特定选项时只显示微调器或Edittext。 There is a Spinner(@+id/selection) with two options as standard and custom. 有一个Spinner(@ + id / selection)有两个标准和自定义选项。 When user selects standard, Spinner(@+id/duration) should be visible below that. 当用户选择标准时,Spinner(@ + id / duration)应该在下面可见。 Just like that when user select custom, Edittext(@+id/custom_duration) should be visible in the next step. 就像用户选择自定义时一样,Edittext(@ + id / custom_duration)应该在下一步中可见。 Always there should be only one option visible upon selecting a option in first spinner(@+id/selection). 在第一个微调器(@ + 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 XML文件

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

        }

    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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