简易listview与adapter实现列表,ArrayAdapter和BaseAdapter

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="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="48dp"android:gravity="center"android:text="万能适配器测试"android:textSize="18sp" />
</LinearLayout>

listview加载数据

private void commonAdapterTest() {ListView listView = (ListView) findViewById(R.id.listview);List<String> datas = new ArrayList<>();for (int i = 0; i < 18; i++) {datas.add("万能适配器测试" + i);}listView.setAdapter(new CommonAdapter<String>(this, datas, R.layout.item) {@Overrideprotected void convertView(View item, String s) {TextView textView = CommonViewHolder.get(item, R.id.textView);textView.setText(s);}});
}

 

两个工具类优化listview

 

public abstract class CommonAdapter<T> extends BaseAdapter {private Context context;private List<T> datas;private int layoutId;public CommonAdapter(Context context, List<T> datas, int layoutId) {this.context = context;this.datas = datas;this.layoutId = layoutId;}@Overridepublic int getCount() {return datas == null ? 0 : datas.size();}@Overridepublic T getItem(int position) {return datas.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {Log.d("listview", "---------LayoutInflater()-----------" + position);convertView = LayoutInflater.from(context).inflate(layoutId, null);}else{}
//        Log.d("listview", "---------getView()-----------" + position);T t = getItem(position);convertView(convertView, t);return convertView;}/*** 局部更新数据,调用一次getView()方法;Google推荐的做法** @param listView 要更新的listview* @param position 要更新的位置*/public void notifyDataSetChanged(ListView listView, int position) {/**第一个可见的位置**/int firstVisiblePosition = listView.getFirstVisiblePosition();/**最后一个可见的位置**/int lastVisiblePosition = listView.getLastVisiblePosition();/**在看见范围内才更新,不可见的滑动后自动会调用getView方法更新**/if (position >= firstVisiblePosition && position <= lastVisiblePosition) {/**获取指定位置view对象**/View view = listView.getChildAt(position - firstVisiblePosition);getView(position, view, listView);}}/*** 需要去实现的对item中的view的设置操作** @param item* @param t*/protected abstract void convertView(View item, T t);}

2222222222222222222222222222

public class CommonViewHolder {/*** @param view 所有缓存View的根View* @param id   缓存View的唯一标识* @return*/public static <T extends View> T get(View view, int id) {SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();//如果根view没有用来缓存View的集合if (viewHolder == null) {viewHolder = new SparseArray<View>();view.setTag(viewHolder);//创建集合和根View关联}View chidlView = viewHolder.get(id);//获取根View储存在集合中的孩纸if (chidlView == null) {//如果没有改孩纸//找到该孩纸chidlView = view.findViewById(id);viewHolder.put(id, chidlView);//保存到集合}return (T) chidlView;}
}

 2、BaseAdapter使用

public class SampleAdapter extends BaseAdapter {private List<AreaEntity> mDataSet;private Context context;public SampleAdapter(Context context, List<AreaEntity> dataSet) {this.mDataSet = dataSet;this.context = context;}@Overridepublic int getCount() {return mDataSet.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}//  删除 打勾 全选public void cleckAll(int is_checked) { //全选 删除多少那里要删除全部for (int a = 0; a < mDataSet.size(); a++) {if (is_checked == a) {mDataSet.get(a).setIfsecect(true);} else {mDataSet.get(a).setIfsecect(false);}}notifyDataSetChanged();}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {convertView = View.inflate(context, R.layout.item_popup_car, null);TextView textView = (TextView) convertView.findViewById(R.id.text);textView.setText(mDataSet.get(position).getName());if (position == 1) {textView.setTextColor(context.getResources().getColor(R.color.derder));}if (mDataSet.get(position).isIfsecect()) {textView.setBackgroundColor(context.getResources().getColor(R.color.topbgokc));} else {textView.setBackgroundColor(context.getResources().getColor(R.color.xianlanbgc));}return convertView;}}

3、ArrayAdapter使用

item_view

<?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="vertical"><TextViewandroid:id="@+id/tv_items"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="20dp"android:textSize="25sp"/></LinearLayout>

实现

private String[] mTitle = new String[]{"开启蓝牙", "关闭蓝牙", "设备列表", "接收数据", "已配对设备"};
mList.setAdapter(new ArrayAdapter<>(this, R.layout.item_list, R.id.tv_items, mTitle));

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Netcdf文件导出基本代码示例

需求&#xff1a;从一个nc文件中取出我想要的变量&#xff0c;导出到另外一个nc文件。 下面是基本代码&#xff1a; GetMapping("/export") public String varExport(ModelAttribute FileSaveVars params ) throws IOException, InvalidRangeException { // 1…

记一次MySQL手工注入

本来想找个装安全狗的站试下绕过&#xff0c;safe dog没找到&#xff0c;但随便一搜搜到一个小站有SQLi&#xff0c;正好借此机会复习下手工注入&#xff08;新版Firefox我吐槽一下&#xff0c;hackbar这么好用的工具&#xff0c;说阉割就阉割&#xff0c;哎&#xff09; 小站没…

Netcdf对数据进行裁剪

对三维数据进行裁剪 List<Range> tyxRanges new ArrayList<>(); tyxRanges.add(new Range(null,0,12)); tyxRanges.add(new Range(null,0,12)); tyxRanges.add(new Range(null,0,12)); Array varData varObject.read(tyxRanges); ncWrite.write(varVar, varData…

Android: 解决动画完成后位置恢复到初始位置的问题

今天在使用TranslateAnimation位移一个LinearLayout时&#xff0c;发现动画完成后又会自动回到初始的状态&#xff0c;设置了fillAfter也不太管用。 仔细研究了一下&#xff0c;发现&#xff1a; 这种现象很正常&#xff0c;因为TranslateAnimation只负责实现位移动画效果&…

Netcdf中时间的格式化

需求&#xff1a;获取到的时间格式为minutes since 2018-01-01 00:30:00 我想要的格式为2018-01-01 00:30:00 java代码如下 // 4 设置时间变量 Variable timeObject ncFile.findVariable("time"); String timeAt timeObject.getUnitsString(); String regex &q…

Android GridView,recycleview,栅格布局

<color name"gray_b7">#F5F5F5</color>//activity背景色&#xff0c;itemview底部&#xff08;横向栅格条&#xff09;背景色&#xff0c;itemview主色白 设置竖向栅格条 adapter中设置 int w MainApplication.getnScreenWidth();holder.itemView.set…

PAT——1027. 打印沙漏

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相邻两行符号数差2&#xff1b;符号数先从大到小顺序递减…

Netcdf中多变量导出代码示例

多个变量进行导出代码如下&#xff1a; GetMapping("/export")public String varExport(ModelAttribute FileSaveVars params ) throws IOException, InvalidRangeException { // 1 设置原始文件路径转存文件路径String filePath "/Users/caowei/workspac…

Android 微信分享

起调效果 分享到朋友 分享到朋友圈 分享效果&#xff1a; 1、登录 微信开发平台 创建Android应用 微信开放平台&#xff1a;https://open.weixin.qq.com/cgi-bin/index?thome/ind…

首页列表显示全部问答,完成问答详情页布局

首页列表显示全部问答&#xff1a;将数据库查询结果传递到前端页面 Question.query.all()前端页面循环显示整个列表。问答排序完成问答详情页布局&#xff1a;包含问答的全部信息评论区以往评论列表显示区。在首页点击问答标题&#xff0c;链接到相应详情页。app.route(/base2)…

Netcdf 文件多属性,按照时间段导出代码示例

由于个人即是java初学者&#xff0c;又是netcdf文件小白&#xff0c;所以为了实现最终效果&#xff0c;可以对一个初始nc文件进行筛选指定变量&#xff0c;并且可以设定时间区间&#xff0c;花得时间比想象的要多&#xff0c;最终实现了效果&#xff0c;代码示例如下&#xff1…

【软工项目组】第九次会议

第九次会议 时间&#xff1a;2017-12-5 22:00 至 23:00 地点&#xff1a;第三教学楼A楼休息区 任务都已经分配完毕了&#xff0c;大家分别完成页面样式、前端逻辑、后端数据库、服务器域名配置的任务。最近几次的会议主要是集体写代码与答疑讨论的时间。 后端的接口在今天上传…

Android 集成微信分享2,实现微信分享

1、build.gradle下添加微信sdk依赖 compile (com.xyzlf.share:sharesdk:0.0.10) {exclude group: com.android.support, module: appcompat-v7 } 2、MainActivity文件夹下创建wxapi文件夹WXEntryActivity类&#xff0c;并配置到manifest里面&#xff1a; public class WXEnt…

ERA5、ERA-interm是啥

ERA5是欧洲中期天气预报中心最新产品。 ERA-Interim 是再分析数据&#xff0c;提供两套数据&#xff0c;一个是同化分析数据&#xff0c;一个是预报数据。分析数据&#xff0c;6小时的时间间隔&#xff0c;每12小时循环一次。例如&#xff0c;0 UTC 开始&#xff0c;6 UTC&…

Liunx 重定向,管道符(转)

原作网址&#xff1a;http://blog.csdn.net/qq_16811963/article/details/52997178 输出重定向 >代表以覆盖的方式将命令的正确输出输出到指定的文件或设备当中。 >>代表以追加方式输出。 常用的输出重定向&#xff1a; 1.命令 >> 文件 2>&1 :以追加的方…