一般的数据资料都是介绍用ArrayAdapter 、SimpleAdapter 、SimpleCursorAdapte,但是个人喜欢用BaseAdapter,原因很简单,BaseAdapter使用起来条理清楚,你想用列些什么数据就定义什么数据列出来,下面就看看它是怎么玩的吧···
首先看一下效果:
步骤一:编写布局(代码如下)
activity_main.xml:
<RelativeLayout 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" tools:context=".MainActivity" > <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/list_view" /> </RelativeLayout>
list_item_layout.xml:
<?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="match_parent" android:orientation="horizontal" > <ImageView android:layout_width="160dp" android:layout_height="100dp" android:scaleType="fitCenter" android:id="@+id/list_item_image" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="30sp" android:id="@+id/list_item_txt1" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="15sp" android:id="@+id/list_item_txt2" /> </LinearLayout> </LinearLayout>
步骤二、Activity准备数据(核心代码):
package com.veryedu.baseadapter; import java.util.ArrayList; import com.example.baseadapter.R; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { ArrayList data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView=(ListView)this.findViewById(R.id.list_view); //准备数据源 data=new ArrayList(); data.add(new HuoYing(R.raw.hyrz2_001, "粗眉", "不会忍术,但是体术超强,青春无极限")); data.add(new HuoYing(R.raw.hyrz2_002, "奈良鹿丸", "分析能力超强")); data.add(new HuoYing(R.raw.hyrz2_003, "李洛克", "体术的继承人")); data.add(new HuoYing(R.raw.hyrz2_004, "春野樱", "大扇子")); data.add(new HuoYing(R.raw.hyrz2_005, "天天", "超多刃具玩家")); data.add(new HuoYing(R.raw.hyrz2_006, "山中井野", "年轻猪肉跌蝶成员")); data.add(new HuoYing(R.raw.hyrz2_007, "日向宁次", "白眼,相当于望远镜吧")); listView.setAdapter(new BaseAdapter() { //getView,是BaseAdapter的核心方法 //这个方法将决定数据以何种布局填充到哪些控件中 @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub //为当前的View指定布局文件 //如果是找控件,我们使用findViewById //如果是找资源,我们使用getResources //如果是找布局,我们使用LayoutInflater Log.v("TAG", "当前是第"+position+"项"); //getView会被反复调用:当数据项在屏幕中显示的时候就调用这个方法 //这每个数据项的布局是一样,仅仅只是数据不同,所以在这里进行一个判断 //避免重复加载布局 if(convertView==null){ convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item_layout,null); } //获取数据源中的数据 HuoYing hy=(HuoYing)data.get(position); //获取当前项的控件 ImageView image_view=(ImageView)convertView.findViewById(R.id.list_item_image); TextView text_view1=(TextView)convertView.findViewById(R.id.list_item_txt1); TextView text_view2=(TextView)convertView.findViewById(R.id.list_item_txt2); //将数据填充到控件中 image_view.setImageResource(hy.image); text_view1.setText(hy.name); text_view2.setText(hy.mtext); return convertView; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return data.get(position); } @Override public int getCount() { // TODO Auto-generated method stub //一班都这么写,显示所有的数据 return data.size(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
源码下载请点这里: