程序实现的效果
话不多说先上子布局
<LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android" android:layout_width&#61;"match_parent" android:layout_height&#61;"match_parent" android:orientation&#61;"horizontal" > <TextView android:id&#61;"&#64;&#43;id/textView1" android:layout_width&#61;"wrap_content" android:layout_height&#61;"wrap_content" android:drawableLeft&#61;"&#64;drawable/ic_launcher" android:paddingRight&#61;"8dip" android:paddingTop&#61;"8dip" android:text&#61;"TextView" android:textSize&#61;"25sp" /> <TextView android:id&#61;"&#64;&#43;id/textView2" android:layout_width&#61;"wrap_content" android:layout_height&#61;"wrap_content" android:paddingLeft&#61;"8dip" android:paddingTop&#61;"8dip" android:text&#61;"TextView" android:textSize&#61;"25sp" /> LinearLayout>
构造一个peeson类来封装数据
package com.example.demotest;public class Person { private String personName; private String personAddress; public Person(String personName, String personAddress) { super(); this.personName &#61; personName; this.personAddress &#61; personAddress; } public String getPersonName() { return personName; } public void setPersonName(String personName) { this.personName &#61; personName; } public String getPersonAddress() { return personAddress; } public void setPersonAddress(String personAddress) { this.personAddress &#61; personAddress; } }
再来写最重要的数据适配器&#xff08;自定义组件的核心&#xff09;
package com.example.demotest;import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; public class MySpinnerAdapter extends BaseAdapter { private List mList; private Context mContext; public MySpinnerAdapter(Context pContext, List pList) { this.mContext &#61; pContext; this.mList &#61; pList; } &#64;Override public int getCount() { return mList.size(); } &#64;Override public Object getItem(int position) { return mList.get(position); } &#64;Override public long getItemId(int position) { return position; } /** * 下面是重要代码 */ &#64;Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater _LayoutInflater&#61;LayoutInflater.from(mContext); convertView&#61;_LayoutInflater.inflate(R.layout.spinner3, null); if(convertView!&#61;null) { TextView _TextView1&#61;(TextView)convertView.findViewById(R.id.textView1); TextView _TextView2&#61;(TextView)convertView.findViewById(R.id.textView2); _TextView1.setText(mList.get(position).getPersonName()); _TextView2.setText(mList.get(position).getPersonAddress()); } return convertView; }
}
看重写的getview方法用布局构建器加载子布局在实例化自布局里面的Textview 表示还可以用viewholder优化
最后再看主要的活动
package com.example.demotest;import java.util.ArrayList;
import java.util.List;import android.app.Activity;
import android.os.Bundle;
import android.widget.Spinner;public class SpinnerTest extends Activity {&#64;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.spinner4);Spinner mSpinner &#61; (Spinner) findViewById(R.id.spinnertest);List persons &#61; new ArrayList();persons.add(new Person("张三", "上海 "));persons.add(new Person("李四", "上海 "));persons.add(new Person("王五", "北京"));persons.add(new Person("赵六", "广州 "));MySpinnerAdapter _MyAdapter &#61; new MySpinnerAdapter(this, persons);mSpinner.setAdapter(_MyAdapter);}
}
代码很简单 初始化控件 和数据 再给Spinner加载适配器就好了
主布局文件就只是一个Spinner
<LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android" android:layout_width&#61;"match_parent" android:layout_height&#61;"match_parent" android:orientation&#61;"horizontal" > <Spinner android:id&#61;"&#64;&#43;id/spinnertest"android:layout_width&#61;"match_parent"android:layout_height&#61;"wrap_content"android:spinnerMode&#61;"dialog"/>LinearLayout>
Spinner的弹出属性在android:spinnerMode中设置
很简单的案例 看完跑一遍吧~