对BaseAdapter和ViewHolder的封装
来源:互联网 发布:龙蛇演义 知乎 编辑:程序博客网 时间:2024/05/20 19:17
项目结构如下:
其中MyBaseAdapter和BaseHolder是2个抽象类,分别是对BaseAdapter和ViewHolder的封装.MainActivity为测试类.
1.MyBaseAdapter类
package com.example.mchenys.mybaseadapterdemo.adapter;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import com.example.mchenys.mybaseadapterdemo.holder.BaseHolder;import java.util.List;/** * 自定义BaseAdapter的基类 * Created by mChenys on 2015/11/15. */public abstract class MyBaseAdapter<T> extends BaseAdapter { private List<T> mData; public MyBaseAdapter(List<T> data) { mData = data; } @Override public int getCount() { return mData == null ? 0 : mData.size(); } @Override public T getItem(int position) { return mData == null ? (T) null : mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { BaseHolder holder; if (null == convertView) { holder = getBaseHolder(position); convertView = holder.getConvertView(); } else { holder = (BaseHolder) convertView.getTag(); } holder.setData(getItem(position)); return convertView; } /** * 由子类去实现获取BaseHolder的方法 * * @param position * @return BaseHolder */ public abstract BaseHolder getBaseHolder(int position);}
2.BaseHolder类
package com.example.mchenys.mybaseadapterdemo.holder;import android.view.View;/** * 自定义BaseHolder的基类 * Created by mChenys on 2015/11/15. */public abstract class BaseHolder<T> { private View mRootView; private T mData; public BaseHolder() { //初始化item的根布局 mRootView = initItemLayout(); //绑定holder到当前根布局中 mRootView.setTag(this); } /** * 获取item的根布局 * * @return */ public View getConvertView() { return mRootView; } /** * 设置item的数据 * * @param t 具体的数据 */ public void setData(T t) { mData = t; refreshView(t); } /** * 获取显示的数据 * * @return */ public T getmData() { return mData; } /** * 由子类去实现刷新界面数据的方法 * * @param t 具体的数据 */ public abstract void refreshView(T t); /** * 由具体的子类去实现初始化listView Item的根布局 * * @return */ public abstract View initItemLayout();}
3.MainActivity测试类
package com.example.mchenys.mybaseadapterdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.ListView;import android.widget.TextView;import com.example.mchenys.mybaseadapterdemo.adapter.MyBaseAdapter;import com.example.mchenys.mybaseadapterdemo.holder.BaseHolder;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private List<String> mData = new ArrayList<>(); private ListView mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mListView = new ListView(this); setContentView(mListView); initData(); showListView(); } /** * 显示ListView */ private void showListView() { mListView.setAdapter(new MyBaseAdapter<String>(mData) { @Override public BaseHolder getBaseHolder(int position) { return new BaseHolder<String>() { private TextView tvInfo; @Override public View initItemLayout() { View view = View.inflate(MainActivity.this, R.layout.item_list, null); tvInfo = (TextView) view.findViewById(R.id.id_tv_info); return view; } @Override public void refreshView(String s) { tvInfo.setText(s); } }; } }); } /** * 初始化测试数据 */ private void initData() { for (int i = 0; i < 20; i++) { mData.add("测试数据:" + i); } }}
4.item_list.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="vertical"> <TextView android:id="@+id/id_tv_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="10dp" /></LinearLayout>
5.测试效果
0 0
- 对BaseAdapter和ViewHolder的封装
- 封装的viewholder和adapter
- Android 对ListView和RecyclerView的两个BaseAdapter封装分享
- Android ListView封装(代码优化):抽取方法共性,封装 BaseAdapter 和 ViewHolder
- BaseAdapter的封装和实现
- BaseAdapter和Viewholder的抽取(模版设计模式)
- ListView BaseAdapter 多种布局 和 viewholder的运用
- ViewHolder优化BaseAdapter的思路:
- 对BaseAdapter进行封装
- 对BaseAdapter中ViewHolder编写简化
- 对BaseAdapter中ViewHolder编写简化
- [Android]对BaseAdapter中ViewHolder编写简化
- 封装好的万能ViewHolder和Adapter
- RecyclerView中Adapter和ViewHolder的封装
- 自定义封装了ViewHolder的BaseAdapter,简化了Adapter的编写
- Android 自定义全局baseAdapter和ViewHolder
- Android 自定义全局baseAdapter和ViewHolder
- ViewHolder的二次封装
- Codeforces 598B Queries on a String 【水题】
- Sublim Text2 安裝 Package Control 和 Ctags插件的方法
- virtualbox下最小化安装centos7后上网设置 不能上网
- javaScript-引用类型(三)
- SpringMVC4.1之Controller层最佳实践
- 对BaseAdapter和ViewHolder的封装
- python 中类的重载以及logging中的level
- 用apachebench给服务器做并发压力性能测试
- Javascript编码规范
- 前端工程之构建工具-gulp实战
- 找回Ubuntu 13.04 ‘Backspace’键 的‘返回’功能
- C++格式化输出二: iomanip
- Angular最佳实践之$http-麻雀虽小 五脏俱全
- 初学Android项目:开发电子市场<第二天>下