View video tutorial
ANDROID Spinner
ANDROID
SimpleAdapter acts as a bridge between the UI and the data source.
Android Simple Adapter with Spinner
➔ The Android SimpleAdapter is used as a bridge between static data from an ArrayList of Map objects and views in an XML layout file.
➔ The SimpleAdapter displays the ArrayList data in a predefined XML view.
Syntax: SimpleAdatper constructor
SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
Simple Adapter with Spinner implementation
➔ Spinner in XML activity_main.xml file
<?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/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.049" />
</androidx.constraintlayout.widget.ConstraintLayout>
➔ Layout design for list items layout/items_layout.xml file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="13dp"
android:layout_height="87dp"
android:layout_weight="1"
tools:srcCompat="@tools:sample/avatars" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="87dp"
android:layout_weight="1"
android:text="TextView" />
</LinearLayout>
➔ Set simpleadapter object to the spinner
Create an SimpleAdapter using the arraylist, layout file, and static arrays and set it to the spinner in the MainActivity.java file.
package com.example.myapplication;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import java.util.ArrayList;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
Spinner spinner;
String names[] = {"Cat", "Cat", "Dog"};
int imageIds[] = {R.drawable.animals_cat, R.drawable.animals_cat2, R.drawable.animals_dog};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
spinner = (Spinner) findViewById(R.id.spinner);
ArrayList<HashMap<String, Object>> list = new ArrayList<>();
for (int i = 0; i < names.length; i++) {
HashMap<String, Object> map = new HashMap<>();
map.put("name", names[i]);
map.put("image", imageIds[i]);
list.add(map);
}
String[] from = {"image", "name"};
int to[] = {R.id.imageView, R.id.textView};
SimpleAdapter simpleAdapter = new SimpleAdapter(
getApplicationContext(), list,
R.layout.items_layout, from, to);
spinner.setAdapter(simpleAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
HashMap<String, Object> map = (HashMap<String, Object>) parent.getItemAtPosition(position);
Toast.makeText(getApplicationContext(), map.get("name").toString(), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
➔ Output