The custom spinner adapter is similar to the custom list row & adapter, because we can use LayoutInflater.
(*edit: This code may not run as-is. Therefore, I have included project files associated with this post available for download at the end of this post.)
1) The spinner layout. This is how each row will look when the spinner is selected. In my example there are three text views as three rows.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical">
<TextView
android:layout_height="wrap_content"
android:id="@+id/TextView01"
android:textSize="12px"
android:layout_width="match_parent"
android:textColor="#000000">
</TextView>
<TextView
android:layout_height="wrap_content"
android:id="@+id/TextView02"
android:layout_width="match_parent"
android:textSize="12px" android:textColor="#000000"></TextView>
<TextView
android:layout_height="wrap_content"
android:id="@+id/TextView03"
android:layout_width="match_parent"
android:textSize="12px"
android:textColor="#000000">
</TextView>
</LinearLayout>
2) The custom adapter
// CUSTOM SPINNER ADAPTER
public class MyCustomSpinnerAdapter extends ArrayAdapter<String> {
public MyCustomSpinnerAdapter(Context context, int textViewResourceId,
String[] objects) {
super(context, textViewResourceId, objects);
// TODO Auto-generated constructor stub
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return getCustomView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return getCustomView(position, convertView, parent);
}
public View getCustomView(int position, View convertView,ViewGroup parent) {
// TODO Auto-generated method stub
// return super.getView(position, convertView, parent);
LayoutInflater inflater = getLayoutInflater();
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.customspinneritem, null);
holder = new ViewHolder();
holder.txt01 = (TextView) convertView.findViewById(R.id.TextView01);
holder.txt02 = (TextView) convertView.findViewById(R.id.TextView02);
holder.txt03 = (TextView) convertView.findViewById(R.id.TextView03);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txt01.setText("Route")
holder.txt02.setText("Strength");
holder.txt03.setText("Form");
return convertView;
}
class ViewHolder {
TextView txt01;
TextView txt02;
TextView txt03;
}
} // end custom adapter
3) Calling the spinner & setting the adapter
Spinner spinner = (Spinner) findViewById(R.id.spinner1);
spinner.setPrompt("Select One");
spinner.setAdapter(new MyCustomSpinnerAdapter(this, 0, items));
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// your code here
}
@Override
>public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
4) Setting string items
String[] items = { "Route 1, Strength 1, Form 1", "Route 2, Strength 2, Form 2", "Route 3, Strength 3, Form 3" };
Downloads:
main.xml
customspinneritem.xml
CustomSpinnerActivity.java (select "qui")
Resources:
My previous Spinner post
Android Dev Tutorial - Hello Spinner
Custom List Row Layout w/ Adapter
This doesn't work. getLayoutInflater() is undefined.
ReplyDeletePerhaps you are using an older build for your project? I am using Android 2.2 and utilize the import android.view.LayoutInflater and have no problems.
ReplyDeletedo this way..
ReplyDeleteprivate Activity activity;//define after class
n replace getLayoutInflater() with
(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
This information is impressive; I am inspired with your post writing style & how continuously you describe this topic. After reading your post, thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic.Android Training in chennai | Android Training|Android Training in chennai with placement
ReplyDeleteI am really happy with your blog because your article is very unique and powerful for new reader.
ReplyDeleteselenium training in chennai
Hats off to the interest for u in android.
ReplyDeletehonor service center chennai
honor service center in chennai
honor service centre chennai
honor service centre
Really i appreciate the effort you made to share the knowledge about Adroid. The topic here i found was really effective...
ReplyDeleteSelenium Training in chennai | Selenium Training in annanagar | Selenium Training in omr | Selenium Training in porur | Selenium Training in tambaram | Selenium Training in velachery