ListView具有缓存机制。
首先主页面布局定义一个ListView
<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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<ListView
android:id="@+id/lv_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
第二步,定义每个Item的布局:
<?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/iv_image"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@mipmap/ic_launcher"/>
<TextView
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_toRightOf="@+id/iv_image"
android:text="Title"
android:gravity="center"
android:textSize="20sp"
android:id="@+id/iv_title"/>
<TextView
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_toRightOf="@+id/iv_image"
android:layout_below="@+id/iv_title"
android:text="Content"
android:gravity="center_vertical"
android:id="@+id/iv_content"
android:textSize="15sp"/>
</RelativeLayout>
第三步,定义一个Bean类,封装列表每一项的内容:
public class ItemBean {
public int ItemImageResid;
public String Itemtitle;
public String ItemContent;
//构造方法,初始化Item属性
public ItemBean(int itemImageResid, String itemtitle, String itemContent) {
ItemImageResid = itemImageResid;
Itemtitle = itemtitle;
ItemContent = itemContent;
}
}
第四步,定义MyAdapter,继承BaseAdapter并重写里面的四个方法:
public class MyAdapter extends BaseAdapter {
private List<ItemBean> mList;
private LayoutInflater mInflater;
//通过构造方法,数据源与数据适配器相关联
public MyAdapter(Context context,List<ItemBean> mList) {
this.mList = mList;
mInflater = LayoutInflater.from(context);
//context使用当前的Adapter的界面对象,mInflater装载
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null)
{
viewHolder = new ViewHolder();
convertView = mInflater.inflate(R.layout.item, null);
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_image);
viewHolder.title = (TextView) convertView.findViewById(R.id.iv_title);
viewHolder.content = (TextView) convertView.findViewById(R.id.iv_content);
convertView.setTag(viewHolder);
}else
{
viewHolder = (ViewHolder) convertView.getTag();
}
ItemBean bean = mList.get(position);
viewHolder.imageView.setImageResource(bean.ItemImageResid);
viewHolder.title.setText(bean.Itemtitle);
viewHolder.content.setText(bean.ItemContent);
return convertView;
}
class ViewHolder
{
private ImageView imageView;
private TextView title;
private TextView content;
}
}
最后,是MainActivty,里面含有数据源:
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> itemBeanList = new ArrayList<>();
for(int i = 0; i < 20; i++)
{
itemBeanList.add(new ItemBean(
R.mipmap.ic_launcher,
"我是标题"+i,
"我是内容"+i
));
}
listView.setAdapter(new MyAdapter(this,itemBeanList));
}
}