首页 > 代码库 > Android学习笔记-listview实现方式之BaseAdapter

Android学习笔记-listview实现方式之BaseAdapter

listview是Android开发中最为常用的组件,这里我们就学习一下用BaseAdapter的方式实现listview,

主布局activity_main.xml是这样的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/ll_root"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ListView        android:id="@+id/lv"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical" >    </ListView></LinearLayout>

定义一个listitem.xml,这用于在listview组件中进行显示。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="60dip"    android:gravity="center_vertical"    android:orientation="horizontal" >    <TextView        android:id="@+id/tv_id"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="5dip"        android:text="ID"        android:textColor="#ff0000"        android:textSize="18sp" />    <LinearLayout        android:layout_marginLeft="20dip"        android:layout_width="fill_parent"        android:layout_height="60dip"        android:gravity="center_vertical"        android:orientation="vertical" >        <TextView            android:id="@+id/tv_name"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="5dip"            android:text="姓名"            android:textColor="#000000"            android:textSize="18sp" />        <TextView            android:id="@+id/tv_number"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="5dip"            android:text="号码"            android:textColor="#880000"            android:textSize="18sp" />    </LinearLayout></LinearLayout>

 那么activiy中的实现逻辑是这样的,由于我是在数据库中进行的取值,所以,定义的有dao类,而读者,完全可以自己定义一个arraylist进行数据的展示,

我们实现的是BaseDdapter,这里呢,这要实现类里面的两个方法,getCount():获取要展示的数据的个数,getView():对数据的展示,这里面有一个重要的方法:inflate(Context context, int resource, ViewGroup root)

  context:是上下文,

  resource:resource The resource ID to inflate,即要展示在listview中的资源文件的id,

  root:root A view group that will be the parent.  Used to properly inflate the * layout_* parameters,这个可以设置位空。

  

 

public class MainActivity extends Activity {	private LinearLayout ll;	private ListView lv;	private  List<Person> persons;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                ll = (LinearLayout) findViewById(R.id.ll_root);        lv = (ListView) findViewById(R.id.lv);        //获取数据        PersonDao dao = new PersonDao(this);        //persons的类型是List<Person>        persons = dao.findAll();                       lv.setAdapter(new MyAdapter());      }    //默认实现类simplexxx,defaultxxx,basexxx.    //当集成借口比较多的时候,可以继承base,simple,defaule,这些开头    private class MyAdapter extends BaseAdapter{    	private static final String TAG = "MyAdapter";		//控制listview里总共有多少条目		@Override		public int getCount() {			// TODO Auto-generated method stub			return persons.size();		}		@Override		public Object getItem(int position) {			// TODO Auto-generated method stub			return null;		}		@Override		public long getItemId(int position) {			// TODO Auto-generated method stub			return 0;		}		@Override		public View getView(int position, View convertView, ViewGroup parent) {					//得到某个位置的person对象。			Person person = persons.get(position);			//把xml加载进来			View view = View.inflate(MainActivity.this, R.layout.listitem, null);						//一定要在view对象中寻找孩子的id			TextView tv_id = (TextView) view.findViewById(R.id.tv_id);			TextView tv_name = (TextView) view.findViewById(R.id.tv_name);			TextView tv_number = (TextView) view.findViewById(R.id.tv_number);						//person.getId(),是int的,+"" ,int一定要转化成String类型的。			//tv_id.setText(person.getId());会出错。			tv_id.setText("ID: "+person.getId());			tv_name.setText("姓名: "+person.getName());			tv_number.setText("电话: "+person.getNumber());						return view;					}    	    }}

 

Android学习笔记-listview实现方式之BaseAdapter