listview用来展示列表数据
一、entries生成数据
1
arrays.xml的配置
1 23 4 8- android
5- think in java
6- 我的未来不是梦
7
效果显示
二、ArrayAdapter生成数据
布局xml的配置
1
android中的代码
1 ListView listView = (ListView) findViewById(R.id.list1);2 String teches[] = { "android", "java", "oracle" };3 ArrayAdapteradapter = new ArrayAdapter (this,4 android.R.layout.simple_list_item_1, teches);5 listView.setAdapter(adapter);
这里需要注意的是arrayadapter的第二个参数,有多少选择,这里不做深入讨论
三、继承ListActivity生成数据
1 public class ListView2 extends ListActivity{ 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 // TODO Auto-generated method stub 6 super.onCreate(savedInstanceState); 7 8 String arrs[]={"aa","bb"}; 9 ArrayAdapteradapter=new ArrayAdapter (this, android.R.layout.simple_list_item_1,arrs);10 setListAdapter(adapter);11 12 13 }14 }
这里需要注意的是无需指定一个布局xml
四、SimpleAdapter生成数据
xml布局
13 4 6 7 9 16 1711 12 14 15
android中的代码
1 public class ListView3 extends ListActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 // TODO Auto-generated method stub 6 super.onCreate(savedInstanceState); 7 8 SimpleAdapter adapter = new SimpleAdapter(this, getData(), 9 R.layout.listview3, new String[] { "img", "title", "content" },10 new int[] { R.id.iamgeview1, R.id.title, R.id.content });11 this.setListAdapter(adapter);12 13 }14 15 int images[] = new int[] { R.drawable.ferrari, R.drawable.lamborghini,16 R.drawable.porsche };17 18 public List
效果图
由于图片比较大,造成展示的效果不是很好,姑且先如此吧
五、自定义BaseAdapter生成数据
这里需要说明的是,实际开发中,自定义baseAdapter来完成需求是很常用的,同时也是listview真正需要掌握的地方
自定义好处在于可以灵活布局
假设现在我们有一个需求,那就是给list中的每条记录添加一个button控件,并且添加事件,用之前的方式就无法满足我们的需求
对比用SimpleAdapter的方式
效果图先上
布局xml
13 4 6 7 9 16 17 19 2011 12 14 15
1 protected void onCreate(Bundle savedInstanceState) {2 // TODO Auto-generated method stub3 super.onCreate(savedInstanceState);4 //datas = getData();5 MyAdapter adapter=new MyAdapter(this);6 setListAdapter(adapter);7 8 }
1 /** 自定义适配器 */ 2 public class MyAdapter extends BaseAdapter { 3 private LayoutInflater mInflater; 4 5 public MyAdapter(Context context) { 6 this.mInflater = LayoutInflater.from(context); 7 8 } 9 10 @Override11 public int getCount() {12 // TODO Auto-generated method stub13 return datas.size();14 }15 16 @Override17 public Object getItem(int position) {18 // TODO Auto-generated method stub19 return position;20 }21 22 @Override23 public long getItemId(int position) {24 // TODO Auto-generated method stub25 return position;26 }27 28 @Override29 public View getView(int position, View convertView, ViewGroup parent) {30 // TODO Auto-generated method stub31 // convertView.setTag(tag)32 ViewHolder holder = null;33 if (null == convertView) {34 convertView = this.mInflater.inflate(R.layout.listview4, null);35 36 ImageView img= (ImageView)convertView.findViewById(R.id.img);37 TextView info=(TextView)convertView.findViewById(R.id.info);38 TextView head=(TextView)convertView.findViewById(R.id.head);39 Button btn=(Button)convertView.findViewById(R.id.btn);40 img.setBackgroundResource(R.drawable.icon);41 info.setText("info"+position);42 head.setText("head_"+position);43 btn.setText("btn_"+position);44 final int index=position;45 btn.setOnClickListener(new OnClickListener() {46 47 @Override48 public void onClick(View v) {49 new AlertDialog.Builder(ListView4.this).setTitle("title").setMessage("info"+index)50 .setPositiveButton("", new DialogInterface.OnClickListener() {51 52 @Override53 public void onClick(DialogInterface dialog, int which) {54 // TODO Auto-generated method stub55 56 }57 }).show();58 59 }60 });61 62 return convertView;63 }
考虑到多次展示问题,android为我们提供了缓存机制,避免每一次都去findviewid一次