Sumit Singh
Posted on November 10, 2020
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.
Posted on November 10, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.