自定义ListView adapter适配器

时间:2023-12-04 22:13:20

转自:http://hilary3113.iteye.com/blog/998352

listview加载adapter过程是这样的.

1 先判断adapter 有多少数据项,根据这个数据确定有多少item. 
2 确定每个item里加载哪个View. 
3 把View里加载要显示的数据.

main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical" android:layout_width="fill_parent"
  4. android:layout_height="fill_parent">
  5. <TextView android:layout_width="wrap_content"
  6. android:layout_height="wrap_content" android:text="123424312423142134" />
  7. <ListView android:id="@+id/list" android:layout_width="fill_parent"
  8. android:layout_height="wrap_content" />
  9. </LinearLayout>

listView布局文件:item.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="horizontal" android:layout_width="fill_parent"
  4. android:layout_height="fill_parent">
  5. <TextView android:id="@+id/name" android:layout_width="wrap_content"
  6. android:layout_height="wrap_content" />
  7. <TextView android:id="@+id/sex" android:layout_width="wrap_content"
  8. android:layout_height="wrap_content" />
  9. <TextView android:id="@+id/age" android:layout_width="wrap_content"
  10. android:layout_height="wrap_content" />
  11. </LinearLayout>

定义一个类,用来传值 People.java

  1. public class People {
  2. public String name;
  3. public String sex;
  4. public String age;
  5. }

定义适配器 MyAdapter.java

  1. package com.action;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.content.Context;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.BaseAdapter;
  9. import android.widget.TextView;
  10. /**
  11. *@Author: hilary
  12. *@Date: 2011-4-11
  13. **/
  14. public class MyAdapter extends BaseAdapter {
  15. private List<People> list = new ArrayList<People>();
  16. //  private People people = new People();
  17. private Context context;
  18. public MyAdapter(Context context){
  19. this.context = context;
  20. }
  21. //适配器根据getCount()函数来确定要加载多少项
  22. @Override
  23. public int getCount() {
  24. return list.size();
  25. }
  26. @Override
  27. public Object getItem(int paramInt) {
  28. return list.get(paramInt);
  29. }
  30. @Override
  31. public long getItemId(int paramInt) {
  32. return paramInt;
  33. }
  34. /*
  35. * 当列表里的每一项显示到界面时,都会调用这个方法一次,并返回一个view 所以方法里面尽量要简单,不要做没必要的动作(non-Javadoc)
  36. * 我这里为了大家好理解,没有做优化
  37. */
  38. @Override
  39. public View getView(int paramInt, View paramView, ViewGroup paramViewGroup) {
  40. //得到列表样式的view对象
  41. paramView=LayoutInflater.from(context).inflate(R.layout.item, null);
  42. //通过view来得到Item中的每个控件的操作权
  43. TextView name = (TextView)paramView.findViewById(R.id.name);
  44. TextView sex = (TextView)paramView.findViewById(R.id.sex);
  45. TextView age = (TextView)paramView.findViewById(R.id.age);
  46. //获得list里面的第paramInt个对象,并把值赋给每个控件
  47. People people = list.get(paramInt);
  48. name.setText(people.name);
  49. sex.setText(people.sex);
  50. age.setText(people.age);
  51. //把一项返回,加载这个View
  52. return paramView;
  53. }
  54. public void addList(People people){
  55. list.add(people);
  56. }
  57. }

主类

  1. package com.action;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.widget.ListView;
  5. public class Tab extends Activity {
  6. MyAdapter adapter ;
  7. /** Called when the activity is first created. */
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.main);
  12. System.out.println("*********Tab");
  13. ListView listView =(ListView) findViewById(R.id.list);
  14. adapter = new MyAdapter(this);
  15. setPeople();
  16. listView.setAdapter(adapter);
  17. }
  18. public void setPeople(){
  19. People people;
  20. for(int i=1;i<5;i++){
  21. people = new People();
  22. people.name="张三";
  23. people.sex = "男";
  24. people.age ="22";
  25. adapter.addList(people);
  26. }
  27. }
  28. }