In normal view, returned by getView() of our custom ArrayAdapter, there are one TextView to show the display text, and another button to open the target address if clicked. In drop-down view, returned by getDropDownView() of our custom ArrayAdapter, there are two TextView to show the display text, and the target address.
/res/layout/row.xml, the layout of the normal view.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/gotext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold"/>
<Button
android:id="@+id/gobutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
/res/layout/dropdown.xml, the layout of the drop-down view.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/gotext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/goaddr"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="italic" />
</LinearLayout>
/res/layout/activity_main.xml, the layout of our activity.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.androidspinnertext.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:autoLink="web"
android:text="http://arteluzevida.blogspot.com/"
android:textStyle="bold" />
<Spinner
android:id="@+id/spinnergo"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textgo"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
MainActivity.java
package com.example.androidspinnertext;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
public class MainActivity extends Activity {
MyClass[] objGo ={
new MyClass("Android-er", "http://arteluzevida.blogspot.com/"),
new MyClass("Arduino-er", "http://arduino-er.blogspot.com/"),
new MyClass("Hello Raspberry Pi", "http://helloraspberrypi.blogspot.com/"),
new MyClass("MyPhotoBlog", "http://photo-er.blogspot.com/"),
new MyClass("g+ Androider+", "https://plus.google.com/102969667192015169220"),
new MyClass("Youtube playlist: Android Development", "http://www.youtube.com/playlist?list=PLP7qPet500deChwUlhq-GsDl8Tun4_WMD"),
new MyClass("Google Play", "https://play.google.com/store")
};
Spinner spinnerGo;
TextView textViewGo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textViewGo = (TextView)findViewById(R.id.textgo);
spinnerGo = (Spinner)findViewById(R.id.spinnergo);
MySpinnerAdapter adapterGo =
new MySpinnerAdapter(MainActivity.this,
R.layout.row,
objGo);
spinnerGo.setAdapter(adapterGo);
//spinnerGo.setOnItemSelectedListener(onItemSelectedListenerGo);
}
OnItemSelectedListener onItemSelectedListenerGo =
new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
MyClass obj = (MyClass)(parent.getItemAtPosition(position));
textViewGo.setText(String.valueOf(obj.getTarget()));
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
};
//define our custom class
public class MyClass{
private String text;
private String target;
public MyClass(String text, String target){
this.text = text;
this.target = target;
}
public void setText(String text){
this.text = text;
}
public String getText(){
return this.text;
}
public void setValue(String target){
this.target = target;
}
public String getTarget(){
return this.target;
}
}
//custom adapter
public class MySpinnerAdapter extends ArrayAdapter<MyClass>{
private MyClass[] myObjs;
public MySpinnerAdapter(Context context, int textViewResourceId,
MyClass[] myObjs) {
super(context, textViewResourceId, myObjs);
this.myObjs = myObjs;
}
public int getCount(){
return myObjs.length;
}
public MyClass getItem(int position){
return myObjs[position];
}
public long getItemId(int position){
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View spView = inflater.inflate(R.layout.row, parent, false);
TextView sp_GoText = (TextView)spView.findViewById(R.id.gotext);
sp_GoText.setText(myObjs[position].getText());
Button sp_GoButton = (Button)spView.findViewById(R.id.gobutton);
sp_GoButton.setText(myObjs[position].getTarget());
sp_GoButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Uri uri = Uri.parse(myObjs[position].getTarget());
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}});
return spView;
}
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View dropDownView = inflater.inflate(R.layout.dropdown, parent, false);
TextView dd_GoText = (TextView)dropDownView.findViewById(R.id.gotext);
dd_GoText.setText(myObjs[position].getText());
TextView dd_GoAddr = (TextView)dropDownView.findViewById(R.id.goaddr);
dd_GoAddr.setText(myObjs[position].getTarget());
return dropDownView;
}
}
}
Download the files.