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.