A dependable dropdown means that your drop-down list is dependent on another factor or value, which will change the content of the dropdown. In android it is known as spinner.
Spinner
Spinner provides functionality to select a value from a list of multiple values. The first value is set as the default value in the spinner and upon clicking a dropdown list appears from where the user can select the desired value.
Implementation
If you don't know how to create a simple dropdown, then refer to this article, spinner in android
XML file
Add the following code in your XML file to include spinner in your Activity
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="30sp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginVertical="10sp"
android:text="Dependable dropdown"
android:textSize="30sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginVertical="10sp"
android:text="Select Gender"
android:textSize="24sp" />
<Spinner
android:id="@+id/spinner_gender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginVertical="5sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginVertical="10sp"
android:text="Select Name"
android:textSize="24sp" />
<Spinner
android:id="@+id/spinner_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5sp"
android:layout_marginBottom="10sp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
Resource XML file
Now the spinner is needed to be provided with the list of values for that we need to create a resource file in the resource file. Follow the following steps to create the resource file
- Right-click on your project
- From the menu go to New > Android Resource File
- Give a name to your file and press **Enter*
Add the following code into your resource file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="gender_type">
<item>Male</item>
<item>Female</item>
</string-array>
<string-array name="girls">
<item>Priya</item>
<item>Dolly</item>
<item>Muskan</item>
<item>Vaishnavi</item>
</string-array>
<string-array name="boys">
<item>Sumit</item>
<item>Ujjwal</item>
<item>Jaskirat</item>
<item>Sukrut</item>
<item>Prince</item>
</string-array>
</resources>
JAVA file
To populate the spinner with a list of choices, you then need to specify a SpinnerAdapter in your Activity or Fragment source code. Following are the key classed:
- Spinner
- SpinnerAdapter
- AdapterView.OnItemSelectedListener
package com.example.spinner;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import com.google.android.material.snackbar.BaseTransientBottomBar;
import com.google.android.material.snackbar.Snackbar;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Spinner spinner_gender
= (Spinner)findViewById(R.id.spinner_gender);
final Spinner spinner_name
= (Spinner)findViewById(R.id.spinner_name);
// Create an ArrayAdapter using the string array and
// a default spinner layout
ArrayAdapter<CharSequence> ad_gender
= ArrayAdapter.createFromResource(
this, R.array.gender_type,
android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of
// choices appears
ad_gender.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner_gender.setAdapter(ad_gender);
spinner_gender.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(
AdapterView<?> adapterView, View view,
int i, long l)
{
if (adapterView.getSelectedItem()
.toString()
.equals("Female")) {
ArrayAdapter<CharSequence> ad_name
= ArrayAdapter.createFromResource(
getApplicationContext(),
R.array.girls,
android.R.layout
.simple_spinner_item);
spinner_name.setAdapter(ad_name);
}
else {
ArrayAdapter<CharSequence> ad_name
= ArrayAdapter.createFromResource(
getApplicationContext(),
R.array.boys,
android.R.layout
.simple_spinner_item);
spinner_name.setAdapter(ad_name);
}
}
@Override
public void onNothingSelected(
AdapterView<?> adapterView)
{
}
});
spinner_name.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(
AdapterView<?> adapterView, View view,
int i, long l)
{
Snackbar
.make(findViewById(R.id.layout),
adapterView.getSelectedItem()
.toString()
+ " is a "
+ spinner_gender
.getSelectedItem()
.toString(),
BaseTransientBottomBar
.LENGTH_LONG)
.show();
}
@Override
public void onNothingSelected(
AdapterView<?> adapterView)
{
}
});
}
}
The setOnItemSelectedListener will work whenever anything selection is made.
Top comments (0)