I would like to develop an android app with three spinners. These three spinners will contain the information about the cars, which are brands, models, and engines.
I have searched with keyword "Android Multi Spinners" and "Android listener for spinners" on google and stackoverflow for almost a week, but I still didn't find the solution.
Here are the links that I got the idea for my code
So, I have two versions of my source code, but both of them didn't work. (Edited: Working now)
For the first version
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
public class AddCarActivity extends Activity {
private Spinner spnBrand, spnModel, spnEngine;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_car);
addItemsOnSpnBrand();
}
public void addItemsOnSpnBrand() {
spnBrand = (Spinner) findViewById(R.id.spnBrand);
List<String> list = new ArrayList<String>();
//Get Brand Database and Add to List
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spnBrand.setAdapter(dataAdapter);
addListenerOnSpnBrandItemSelection();
}
public void addListenerOnSpnBrandItemSelection() {
spnBrand = (Spinner) findViewById(R.id.spnBrand);
spnBrand.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
addItemOnSpnModel(parent.getItemAtPosition(pos).toString());
}
public void onNothingSelected(AdapterView<?> parent) {
return;
}
});
}
public void addItemOnSpnModel(String inBrand) {
spnModel = (Spinner) findViewById(R.id.spnModel);
List<String> list = new ArrayList<String>();
//Get Model Database and Add to List
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spnSeries.setAdapter(dataAdapter);
addListenerOnSpnModelItemSelection();
}
public void addListenerOnSpnModelItemSelection() {
spnModel = (Spinner) findViewById(R.id.spnModel);
spnModel.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
addItemOnSpnEngine(parent.getItemAtPosition(pos).toString());
}
public void onNothingSelected(AdapterView<?> parent) {
return;
}
});
}
public void addItemOnSpnEngine(String inModel) {
spnEngine = (Spinner) findViewById(R.id.spnEngine);
List<String> list = new ArrayList<String>();
//Get Engine Database and Add to List
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spnEngine.setAdapter(dataAdapter);
}
}
Here is my Second version
public class AddCarActivity extends Activity implements OnItemSelectedListener {
private Spinner spnBrand, spnModel, spnEngine;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_car);
addItemsOnSpnBrand();
}
public void onItemSelected(AdapterView<?> parent, View view, int position,long arg3) {
int id = parent.getId();
switch (id)
{
case R.id.spnBrand:
addItemOnSpnModel(parent.getItemAtPosition(position).toString()); break;
case R.id.spnModel:
addItemOnSpnEngine(parent.getItemAtPosition(position).toString()); break;
}
}
public void onNothingSelected(AdapterView<?> arg0) {
return;
}
public void addItemsOnSpnBrand() {
spnBrand = (Spinner) findViewById(R.id.spnBrand);
List<String> list = new ArrayList<String>();
//Get Brand Database and Add to List
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spnBrand.setAdapter(dataAdapter);
spnBrand.setOnItemSelectedListener(this);
}
public void addItemOnSpnModel(String inBrand) {
spnModel = (Spinner) findViewById(R.id.spnModel);
List<String> list = new ArrayList<String>();
//Get Model Database and Add to List
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spnModel.setAdapter(dataAdapter);
spnModel.setOnItemSelectedListener(this);
}
public void addItemOnSpnEngine(String inModel) {
spnEngine = (Spinner) findViewById(R.id.spnEngine);
List<String> list = new ArrayList<String>();
//Get Engine Database and Add to List
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spnEngine.setAdapter(dataAdapter);
}
}
Thank you everyone that have tried to help me. I just found the problem when retest the codes for answering Hip Hip Array. I use the wrong variable in addListenerOnSpnModelItemSelection(). I mistaken to use spnBrand instead of spnModel. Now, these two versions are worked, so I corrected them and hope that they will help the others that try to use the multi-spinners in android.
Lets say,you have 3 spinners spinner_1,spinner_2 and spinner_3 then:
spinner_1.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int position, long arg3) {
if(spinner_1.getSelectedItem().equals("Spin1-Item-1")){
{
// set adapter to spinner_2 here for "Spin1-Item-1" selected
}
else if(spinner_1.getSelectedItem().equals("Spin1-Item-2"))
{
// set adapter to spinner_2 for "Spin1-Item-2" not selected
}
else
{
// set adapter to spinner_2 for "Spin1-Item-3" not selected
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
spinner_2.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int position, long arg3) {
if(spinner_2.getSelectedItem().equals("Spin2-Item-1")){
{
// set adapter to spinner_3 here for "Spin2-Item-1" selected
}
else if(spinner_2.getSelectedItem().equals("Spin2-Item-2"))
{
// set adapter to spinner_3 for "Spin2-Item-2" not selected
}
else
{
// set adapter to spinner_3 for "Spin2-Item-3" not selected
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});