使用ListView大部分都会使用自定义的适配器来达到显示更多种多样的内容,所以下面的例子就简单的使用了自定义的适配器。
1.XML文件代码:
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity" >
<ListView
android:id="@+id/ListViewID"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
2.ListView的item子布局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="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageviewID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textviewID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="内容"
android:textSize="24sp" />
</LinearLayout>
3.自定义的适配器文件MyAdapter.java文件的代码如下:
public class MyAdapter extends BaseAdapter {
//通过构造方法也可以传过来一个List<E> list集合,E类型为自定义的一个封装数据的实体类
LayoutInflater inflater;
/**带参的构造方法*/
public MyAdapter(Context context) {
this.inflater=LayoutInflater.from(context);
}
/**该方法的返回值控制该Adapter包含多少个列表项(item)*/
@Override
public int getCount() {
//如果传过来集合,此处为list.size
return 30;
}
/**该方法的返回值决定第position处的列表项(item)的内容*/
@Override
public Object getItem(int position) {
//如果传过来集合,此处为list.get(position);
return null;
}
/**该方法的返回值决定第position处的列表项(item)的ID*/
@Override
public long getItemId(int position) {
return position;
}
/**该方法的返回值决定第position处的列表项(item)组件*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder=null;
if (convertView==null) {
holder=new ViewHolder();
convertView=inflater.inflate(R.layout.listview_item, null);
holder.imageView=(ImageView) convertView.findViewById(R.id.imageviewID);
holder.textView=(TextView) convertView.findViewById(R.id.textviewID);
convertView.setTag(holder);
}else {
holder=(ViewHolder) convertView.getTag();
}
//通过list.get(position);获得封装数据的实体类的实例,然后再获取里面的数据设置到相应的控件上
//设置TextView的内容
holder.textView.setText("第"+position+"个item");
//设置ImageView的图片
holder.imageView.setImageResource(R.drawable.nantou);
return convertView;
}
/**优化ListView所定义的重用类*/
class ViewHolder{
//item布局文件上面有一个ImageView和一个TextView,所以我们这里需要定义2个View
ImageView imageView;
TextView textView;
}
}
说明:上面的方法中第1个和第4个很重要。
4.MainActivity.java文件代码如下:public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView=(ListView) findViewById(R.id.ListViewID);
MyAdapter adapter=new MyAdapter(this);
listView.setAdapter(adapter);
}
}
5.最终运行效果: