2019独角兽企业重金招聘Python工程师标准>>>

ViewHolder类

public class CommonViewHolder {private final SparseArray<View> mViews;private final int mLayoutId;private int mPosition;private final View mConvertView;public int getLayoutId() {return mLayoutId;}private CommonViewHolder(ViewGroup parent, int layoutId, int position) {this.mPosition = position;this.mViews = new SparseArray<>();this.mLayoutId = layoutId;// TODOmConvertView = LayoutInflater.from(parent.getContext()).inflate(layoutId, null);mConvertView.setTag(this);}public static CommonViewHolder get(View convertView,ViewGroup parent, int layoutId, int position) {CommonViewHolder holder;if (convertView == null || ((CommonViewHolder) convertView.getTag()).getLayoutId() != layoutId) {holder = new CommonViewHolder(parent, layoutId, position);} else {holder = (CommonViewHolder) convertView.getTag();holder.mPosition = position;}return holder;}public View getConvertView() {return mConvertView;}@SuppressWarnings("unchecked")public <T extends View> T getView(int viewId) {View view = mViews.get(viewId);if (view == null) {view = mConvertView.findViewById(viewId);mViews.put(viewId, view);}return (T) view;}public CommonViewHolder setText(int viewId, String text) {TextView view = getView(viewId);view.setText(text);return this;}public CommonViewHolder setImageResource(int viewId, int drawableId) {ImageView view = getView(viewId);if (view != null) {view.setImageResource(drawableId);}return this;}public CommonViewHolder setImageBitmap(int viewId, Bitmap bm) {ImageView view = getView(viewId);view.setImageBitmap(bm);return this;}public int getPosition() {return mPosition;}}

adapter类

public abstract class CommonAdapter<T> extends BaseAdapter {protected LayoutInflater mInflater;protected Context mContext;protected List<T> mDatas = new ArrayList<>();protected final int mItemLayoutId;public CommonAdapter(Context context, T[] datas, int itemLayoutId) {mContext = context;mInflater = LayoutInflater.from(mContext);mItemLayoutId = itemLayoutId;ArrayList<T> dataList = new ArrayList<>();if (datas != null) {Collections.addAll(dataList, datas);}mDatas.addAll(dataList);}public CommonAdapter(Context context, List<T> datas, int itemLayoutId) {mContext = context;mInflater = LayoutInflater.from(mContext);mDatas.addAll(datas);mItemLayoutId = itemLayoutId;}public void updateData(List<T> datas) {mDatas.clear();mDatas.addAll(datas);notifyDataSetChanged();}public void updateData(T[] datas) {mDatas.clear();if (datas != null && datas.length != 0) {Collections.addAll(mDatas, datas);}notifyDataSetChanged();}@Overridepublic int getCount() {return mDatas == null ? 0 : mDatas.size();}@Overridepublic T getItem(int position) {return mDatas == null ? null : mDatas.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {final CommonViewHolder viewHolder = getViewHolder(position, convertView, parent);convert(viewHolder, getItem(position));View view = viewHolder.getConvertView();if (parent instanceof ListView && !useCustomListSelector()) {view.setBackgroundResource(R.drawable.clickable_item_bg_selector);}return view;}public abstract void convert(CommonViewHolder helper, T item);public boolean useCustomListSelector() {return false;}public List<T> datas() {return mDatas;}private CommonViewHolder getViewHolder(int position, View convertView, ViewGroup parent) {return CommonViewHolder.get(convertView, parent, mItemLayoutId, position);}private OnItemClickListener<T> mItemClickListener;public void setOnItemClickListener(OnItemClickListener<T> listener) {mItemClickListener = listener;}public interface OnItemClickListener<T> {void onItemClick(int position, T data, View itemView);}}

资源文件

在drawable目录中添加文件clickable_item_bg_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<!--~ Copyright (c) 2018. Lorem ipsum dolor sit amet, consectetur adipiscing elit.~ Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.~ Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.~ Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.~ Vestibulum commodo. Ut rhoncus gravida arcu.--><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_enabled="false" android:state_pressed="false"><color android:color="@android:color/white"/></item><item android:state_enabled="true" android:state_pressed="false"><color android:color="@android:color/white"/></item><item android:state_enabled="true" android:state_pressed="true"><color android:color="#D9D9D9"/></item></selector>

在res目录下创建目录drawable-v21 ,添加文件 clickable_item_bg_selector.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="#D9D9D9"><item><shape android:shape="rectangle"><solid android:color="@android:color/white" /></shape></item></ripple>

在styles.xml文件中添加以下样式,主要是去掉默认的分割线

    <style name="defaultListView"><item name="android:listSelector">@android:color/transparent</item><item name="android:divider">@null</item></style>

使用listview模版

第一步,布局文件添加listview控件

    <ListViewandroid:id="@+id/research_listview"style="@style/defaultListView"android:layout_width="match_parent"android:layout_height="match_parent"/>

第二步,创建数据bean,例如Bean

第三步,新建一个weiget的类,集中处理item的ui,例如ListItem,继承自通用的布局,例如RelativeLayout

import android.content.Context;
import android.util.AttributeSet;
import android.widget.RelativeLayout;import okhttp.example.com.okhttptest.activity.bean.Bean;public class ListItem extends RelativeLayout {public ListItem(Context context) {super(context);}public ListItem(Context context, AttributeSet attrs) {super(context, attrs);}public ListItem(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}public void setup(Bean bean){//TODO 初始化界面}
}

第四步,创建item的布局文件,例如R.layout.item,并且根布局指向之前新建的weiget类

<xxx.ListItem
xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/image"android:layout_width="50dp"android:layout_height="50dp"android:layout_centerVertical="true"/><TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_toRightOf="@+id/image"/>
</xxx.ListItem >

第五步

在activity中实例化listview,

    private ListView mListView;private MyAdapter mAdapter;private List<Bean> mList = new ArrayList<>();@Overridepublic void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {super.onCreate(savedInstanceState, persistentState);setContentView(R.layout.activity_main);mListView = findViewById(R.id.listview);//期间可以先设置header,根据需要来弄mAdapter = new MyAdapter(this,mList,R.layout.item);mListView.setAdapter(mAdapter);}private class  MyAdapter extends CommonAdapter<Bean>{public MyAdapter(Context context, List<Bean> datas, int itemLayoutId) {super(context, datas, itemLayoutId);}@Overridepublic void convert(CommonViewHolder helper, Bean item) {ListItem widgetView = (ListItem) helper.getConvertView();widgetView.setup(item);}}

更新数据

  mAdapter.updateData(mList);

转载于:https://my.oschina.net/carbenson/blog/2980091

listview 通用模版相关推荐

  1. 软件需求规格说明书通用模版_通用需求挑战和机遇

    软件需求规格说明书通用模版 When developing applications there will be requirements that are needed on more than o ...

  2. vue cli3--创建通用模版

    1. 在package.json中,写入脚本 "scripts": { "serve": "vue-cli-service serve", ...

  3. app注册协议通用模版

    隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐 ...

  4. 前端登录界面通用模版

  5. 浏览器插件 - 通用注入模版JS

    //TIP:先通过Tampermonkey编写为可用脚本,再套用此通用模版,再拖到Chrome安装为扩展即可. /* 通用注入原型3:*/ switch (window.location.pathna ...

  6. Android复习02(ListView具体操作[很详细]、简单音乐播放器)

    2020年 3月24日 星期二 Android录播回放 笔记[腾讯课堂] https://ke.qq.com/webcourse/index.html#cid=989760&term_id=1 ...

  7. YzmCMS全新轻爽极简风格模版主题

    简介: 基于本次时间关系,以及对YzmCMS完整性的支持,本次发布的"Eric"模版主题,暂不提供"会员中心"相关模版,仅提供常用的通用模版. 同时,本次发布的 ...

  8. 函数 的 重载 和 函数 模版

    1 //函数的重载对一个函数名 赋予它 多重意义 就成为函数的重载 2 //在函数重载的基础上 我们仍然对那种 实现功能相似 3 // 但是 函数类型和形参不确定的 情况下 产生了 函数 模版 4 # ...

  9. yii2-更改默认显示的通用主页

    在views/layouts/目录下新建一个login.php,然后SiteController中更新下面的方法 public function actionIndex(){ $this->la ...

最新文章

  1. python文件关键行数_Python计算大文件行数方法及性能比较
  2. python pdf-pythonPDF书籍十三本
  3. LeetCode Search in Rotated Sorted Array II
  4. 将GB28181国标流转成RTSP流
  5. mysql分区跨机器_(转) mysql的分区技术 .
  6. 二维计算几何基础知识
  7. c++ 低位在前 高位在后_A股市场:如果股票涨停后第二天“高开低走”,你知道怎么操作才能利益最大化吗?...
  8. 【Python】ffmpeg模块处理视频、音频信息
  9. 小白学爬虫——第一部分:简单学习Python
  10. Open3d之对点云进行DBSCAN 聚类
  11. 详解用Navicat工具将Excel中的数据导入Mysql中
  12. 字典序的理解以及python实现
  13. 网络层-IP地址和MAC地址
  14. C语言斐波那契数列解析
  15. Could not resolve dependencies for project com.koolearn:koo-b2b-tesa-api:jar:1.0-dev-SNAPSHOT
  16. 使用每篇等工具进行图文编辑
  17. 脑波扫描器市场现状及未来发展趋势
  18. IDC机房设备变更流程
  19. 人工智能NLTK性别发现器
  20. adb删除图案锁屏密码

热门文章

  1. 特斯拉车祸最新调查结果公布,“自动驾驶”Autopilot又双叒成主角
  2. 支付宝换上“读心术”AI客服,就为配合双11剁手的你
  3. 用libtommath实现RSA算法
  4. Scala 语言学习之泛型(7)
  5. java 读取Zip文件进行写入
  6. Cordova webapp实战开发:(2)认识一下Cordova
  7. Linux系统下如何实现文件系统配额
  8. Notification添加点击意图的学习理解
  9. JavaScript螺纹的问题和答案
  10. ANT安装与测试和简明教程