Android BaseAdapter的使用
数据适配器有很多种,今天在这里记录一下最通用是适配器BaseAdapter。
首先说一下什么是适配器,这里我从网上找到一幅图片
由上图我们不难看出,所谓的适配器,就是数据与视图之间的桥梁。由它把数据绑定到ListView控件上。
具体怎么绑定呢,今天就来记录一下。首先我们先看一下效果图。
这是我写的一个简单的图片、标题、内容布局。关于ListView 我还想说明一点,就是它的缓存机制。它把所有当前页面不显示的内容都放到缓存里,当页面往上滑动时,超出屏幕的部分也会放到缓存里,新显示的部分会直接从缓存里面取。
1、首先新建一个Android.XML文件,用来显示ListView每一行将要显示样式。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/item_img" android:layout_width="60dp" android:layout_height="60dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/item_title" android:layout_width="match_parent" android:layout_height="30dp" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/item_img" android:text="标题" android:textSize="25sp" android:gravity="center_horizontal" /> <TextView android:id="@+id/item_content" android:layout_width="match_parent" android:layout_height="30dp" android:layout_toRightOf="@+id/item_img" android:layout_below="@+id/item_title" android:layout_alignParentRight="true" android:text="内容" android:textSize="15sp" android:gravity="center_vertical" /> </RelativeLayout>
2、定义一个Bean对象,用来存放ListView每一行将要显示的数据
package com.example.baseadapter; public class ItemBean { public int itemImgResid; public String itemTitle; public String itemContent; public ItemBean(int itemImgResid,String itemTitle,String itemContent) { this.itemImgResid = itemImgResid; this.itemTitle = itemTitle; this.itemContent = itemContent; } }
3、自定义Adapter 并继承BaseAdapter 并重写里面的4个方法。
其中第四个最重要,就是获取每个Item将要显示的内容。
package com.example.baseadapter; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class MyAdapter extends BaseAdapter { private List<ItemBean> listDate; private LayoutInflater mLayoutInflater; public MyAdapter(Context context,List<ItemBean> listBean) { mLayoutInflater = LayoutInflater.from(context); this.listDate = listBean; } @Override //获取数据集中的数据个数 public int getCount() { // TODO Auto-generated method stub return listDate.size(); } @Override //获取数据集中制定索引对应的数据项 public Object getItem(int position) { // TODO Auto-generated method stub return listDate.get(position); } @Override //获取指定行对应ID public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override //获取每一个Item的显示内容 public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if(convertView == null) { viewHolder = new ViewHolder(); convertView = mLayoutInflater.inflate(R.layout.itemlist, null); //实例化控件 viewHolder.img = (ImageView) convertView.findViewById(R.id.item_img); viewHolder.textTitle = (TextView) convertView.findViewById(R.id.item_title); viewHolder.textContent = (TextView) convertView.findViewById(R.id.item_content); convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag(); } //抽取bean对象 ItemBean bean = listDate.get(position); //设置控件数据 viewHolder.img.setImageResource(bean.itemImgResid); viewHolder.textTitle.setText(bean.itemTitle); viewHolder.textContent.setText(bean.itemContent); return convertView; } //ViewHolder用于缓存 class ViewHolder{ public ImageView img; public TextView textTitle; public TextView textContent; } }
做到这里基本上就结束了。在主页面我们直接调用就好了。还有一些细节的代码,就没粘出来了。应该不影响大家的理解。
package com.imooc.baseadaptertest; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import java.util.ArrayList; import java.util.List; 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.lv_main); List<ItemBean> dataList = new ArrayList<>(); // 创建假数据 for (int i = 0; i < 20; i++) { dataList.add(new ItemBean( R.drawable.ic_launcher, "我是更多<<<<<<"+i, "我是内容,我的字数比较多"+i )); } // 设置适配器 listView.setAdapter(new MyAdapter(this, dataList)); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。