android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter

我最近做项目用到了基本适配器BaseAdapter,所以写篇博客总结一下,希望也能对你有所帮助

什么时候用BaseAdapter(同一项存在多个控件,复杂的列表时)

Android中Adapter类其实就是把数据源绑定到指定的View上,然后再返回该View,而返回来的这个View就是ListView中的某一行item。这里返回来的View正是由我们的Adapter中的getView方法返回的。这样就会容易理解数据是怎样一条一条显示在ListView 中的。

简单的ListView可使用ArrayAdapter和SimpleAdapter两种适配器。其中, ArrayAdapter适用于纯文本的列表数据,SimpleAdapter适用于带图标的列表数据。实际应用中常常有更复杂的列表,比如同一项中存在多个控件,这种情况即使用SimpleAdapter也很吃力,而且不易扩展。基于此, Android提供了一种适应性更强的基本适配器BaseAdapter,该适配器允许开发者在别的代码文件中进行逻辑处理,大大提高了代码的可读性和可维护性。

step1:创建列表单行的布局

新建一个layout,和普通的layout文件差不多,只不过这个文件设置的是ListView单项的样式。

例如:item_layout.xml

android:id="@+id/textview_date"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="TextView"android:textAppearance="@style/TextAppearance.AppCompat.Medium"android:visibility="visible" />

android:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal">

android:id="@+id/image_time"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="0.5" />

android:id="@+id/textview_time"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:textAppearance="@style/TextAppearance.AppCompat.Large" />

step2:实现BaseAdapter的基本方法

写一个新的适配器继承BaseAdapter,从BaseAdapter派生的数据适配器主要实现下面几个方法。

构造函数:指定适配器需要处理的数据集合。

getCount:获取数据项的个数。

getView:获取每项的展示视图,并对每项的内部控件进行业务处理。

getItem:数据集中指定索引对应的数据项。

例如:

public class MyListAdapter extendsBaseAdapter {

Context context;

List data; //数据源int layout; //Item布局

public MyListAdapter(Context context, int layout ,Listdata){this.context=context;this.layout=layout;this.data=data;

}/*** 这里的getCount方法是程序在加载显示到ui上时就要先读取的

* 这里获得的值决定了listview显示多少行

* 实际应用中此处的返回值是由从数据库中查询出来的数据的总条数*/@Overridepublic intgetCount() {return data == null ? 0: data.size();

}/*** 根据ListView所在位置返回View

*@paramposition

*@return选中的数据*/@Overridepublic Object getItem(intposition) {

Nbp_data Nbp_choosen_data=data.get(position);//return Nbp_choosen_data == null ? null : data.get(position);

returnNbp_choosen_data;

}/*** 根据ListView位置得到数据源集合中的Id

*@paramposition

*@return

*/@Overridepublic long getItemId(intposition) {returnposition;

}/*** 重写adapter最重要的就是重写此方法,此方法也是决定listview界面的样式的

*@paramposition

*@paramconvertView

*@paramparent

*@return

*/@Overridepublic View getView(intposition, View convertView, ViewGroup parent) {

ImageView imageView_time;

TextView textView_time;

TextView textView_date;final p_data record_data=data.get(position);if (convertView == null) {

convertView= LayoutInflater.from(context).inflate(layout,null);

}else{

}

imageView_time=(ImageView) convertView.findViewById(R.id.image_time);

textView_time=(TextView) convertView.findViewById(R.id.textview_time);

textView_date=(TextView) convertView.findViewById(R.id.textview_date);

imageView_time.setImageResource(record_data.getTimeImage());

textView_date.setText(record_data.getDATE());

textView_time.setText(record_data.getTIME());

returnconvertView;

}

}

在列表单行控件比较多的时候,ViewHolder方法可大幅度优化ListView的滑动。

step3:在Activity或Fragment中与ListView绑定

例如:

//在fragment的onCreateView()中

MyListAdapter myListAdapter=newMyListAdapter(root.getContext(),R.layout.item_layout,recorded_data);

ListView listView=(ListView)root.findViewById(R.id.lv_recordedData);

listView.setAdapter(myListAdapter);//设置事件监听

listView.setOnItemClickListener(newAdapterView.OnItemClickListener() {

@Overridepublic void onItemClick(AdapterView> arg0, View arg1, int arg2, longarg3) {

p_data choosen_data=(p_data)arg0.getItemAtPosition(arg2);int date =choosen_data.getDATE();int time =choosen_data.getTIME();}

});长按事件监听

// listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){//@Override//public boolean onItemLongClick(AdapterView> arg0, View arg1, int arg2, long arg3){//return true;//}//});

参考:

《Android Studio开发实战:从零基础到App上线》 欧阳燊  清华大学出版社

原文:https://www.cnblogs.com/XIEjm/p/12813935.html

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

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

相关文章

cnn生成图像显著图_基于CNN与图像前背景分离的显著目标检测

基于CNN与图像前背景分离的显著目标检测东野长磊;万文鑫【期刊名称】《软件导刊》【年(卷),期】2020(019)001【摘要】为了解决计算机视觉模拟人眼的视觉机制,显著性目标检测DSS(DeeplySupervisedSalient)在某个场景中人眼首先观察到的目标.基于卷积神经网络和图像前背景分离算法…

api 创建zookeeper客户端_一文了解 Zookeeper 基本原理与应用场景

Zookeeper 是一个高性能、高可靠的分布式协调系统,是 Google Chubby 的一个开源实现,目前在分布式系统、大数据领域中使用非常广泛。本文将介绍 Zookeeper 集群架构、数据模型、监听机制,以及Zookeeper典型的应用场景等。1. Zookeeper 集群角…

mysql操作json优点和缺点_SQL-mysql操作json

一 前言MySQL 5.7.8 之后 支持 JSON (由rfc7159规定)数据类型,其能在字段中使用json 类型,做到了自动校验是否为json类型数据,否则插入数据会报异常;其次,储存json数据内部做到了优化储存,能够快速读取json…

android多个水波球,android球形水波百分比控件代码

本文主要介绍的是一个球形水波的百分比控件,市面上有各种形形色色的百分比控件,我一直觉得水波是最炫的,UI给了我这个机会,然而网上搜了一大堆,不是太复杂,代码太多(反正我是调不出效果来),就是…

python数据去重的函数_python pandas dataframe 去重函数的具体使用

今天笔者想对pandas中的行进行去重操作,找了好久,才找到相关的函数 先看一个小例子 from pandas import Series, DataFrame data DataFrame({k: [1, 1, 2, 2]}) print data IsDuplicated data.duplicated() print IsDuplicated print type(IsDuplicate…

合信达 机器人_【中信建投 通信】拓邦股份:中报电话会议干货纪要

原标题:【中信建投 通信】拓邦股份:中报电话会议干货纪要一中信建投通信行业分析师 闫慧辰首先非常感谢大家参加我们举办的拓邦股份2017年中报解读电话会议。拓邦股份是我们5月份开始重点推荐的标的之一。我们观察到了公司业绩的爆发增长,同时…

android 3.0单元测试,Android Studio 3.0 gradle 3.0.0-beta2打破了Kotlin单元测试覆盖率?

我有一个简单的Kotlin课程,如下所示class MyClass {fun justSayHello(yes: Boolean): String {if (yes) {return "Hello"} else {return "Sorry"}}}我有我的测试(这里用Java编写,也可以在Kotlin中)public class MyClassTest {private MyClass myClass new…

c++ 二维数组_【技术篇】C指针与二维数组深度辨析

一、源代码/*第01行*/ CLion 2019.3.4 x64中编写的源代码截图二、深度辨析CLion 2019.3.4 x64中编译的结果截图zippo[4][2]是一个四行二列的int型二维数组①不论一维数组还是二维数组,数组名就是指向数组首个元素的指针,也即数组名就是数组首个元素的…

numberformate php_php number_format函数怎么用?

number_format函数是PHP中的一个内置函数,用于格式化一个包含数千个分组的数字,其语法是“string number_format ( $number, $decimals, $decimalpoint, $sep )”。本篇文章主要给大家介绍php number_format用法,希望对需要的朋友有所帮助&am…

android 脚本模拟点击屏幕,android 脚本模拟点击屏幕,android模拟

android 脚本模拟点击屏幕,android模拟对低概率问题,需要多次测试以复现问题,使用脚本更容易实现,避免频繁人工操作首先要了解手机的众多输入设备:命令:adb shell cat /proc/bus/input/devices/I: Bus0000 …

shiro启动之后页面访问不了_java:shiro入门——4

【7】测试【7.1】启动点击apply然后点击OK【7.2】登录过滤访问http://localhost:8080/platform/home的时候,会被【7.3】角色过滤使用“admin”用户登录,密码:123根据SecurityServiceImpl我们可以知道使用admin账号登录成功之后:此…

Android如何分析native代码,使用android-ndk-profiler对native代码进行性能分析

android-ndk-profiler需要使用gcc进行编译,从NDK r13b 起NDK使用的默认编译器从gcc换成了clang,官方提供了Simpleperf工具进行性能分析,具体情况可以参考https://developer.android.google.cn/ndk/guides/simpleperf 。下载使用编译方面的改动…

python模板语言_django的模板语言

Django模板语言1.基础语法:return render(request,qwe.html,{obj:obj}),render的最后的字典可以以键值对的形式传入多个值,在django模板中只用到两种符号变量相关:{{变量名}} 逻辑相关:{% %}1)变量相关:a: 变量名有字母数字和下划线组成,(.)用来获取对象的属性值,ls.0 --> …

oreo另一个意思_记一次有意思的统计(部分大宗商品价格指数相关性统计)

最近闲来无事,对部分大宗商品近十年的价格涨幅做了个统计,发现有些有意思的现象:大多资产价格走势如果放到一个足够长得时间维度里,那其实整体走势是比较一致的;有些资产价格走势高度相关,但是在某个时间段…

android左右耳机声音大小不一样,AirPods左右两边声音大小不同怎么办 单侧无声和两侧音量不同解决方法...

AirPods连接 iPhone 后如果出现了左右两边声音大小不一样,或者单侧无声的问题,可能是软件导致的暂时性故障,也有可能是硬件问题。当耳机音量出现异常时,可以通过以下几种方式尝试恢复。单侧无声和两侧音量不同解决方法&#xff1a…

laravel 任务队列_Laravel5.5之事件监听、任务调度、队列

流程:1.1 创建eventphp artisan make:event UserLoginLoginController.php/*** The user has been authenticated.** param IlluminateHttpRequest $request* param mixed $user* return mixed*/protected function authenticated(Request $request, $user){eve…

pytorch微调bert_小版BERT也能出奇迹:最火的预训练语言库探索小巧之路

选自Medium作者:Victor Sanh机器之心编译参与:魔王过去一段时间,大模型层出不穷。在大家纷纷感叹「大力出奇迹」的时候,作为调用预训练语言模型最流行的库,HuggingFace 尝试用更少的参数量、更少的训练资源实现同等的性…

android 应用无法安装程序,朋友android设备无法安装我的Android应用程序,我甚至不能为我自己做...

我最近上传了我的android应用程序到市场https://market.android.com/details?idcom.DGNT,但我的朋友们不能将它安装在他们的设备上(说他们的手机不兼容)。该网站甚至说我自己的手机与我的应用程序不兼容,即使我已经通过eclipse编译了它,并成…

qsub 指定节点_PBS,QSUB常用命令

1、后台提交作业qsub语法: qsub [-a date_time] [-A account_string] [-e path] [-h] [-I] [-jjoin] [-k keep] [-l resource_list] [-m mail_options] [-nNode_allocation_Method [-L v1,[v2,[v3,[v4]]]]] [-M user_list] [-Nname] [-o path] [-p priority] [-q pool] [-r y|n…

if test 多条件_秒懂Python编程中的if __name__ == #39;main#39; 作用和原理

在大多数编排得好一点的脚本或者程序里面都有这段if __name__ main:1 这段代码的功能一个python的文件有两种使用的方法:第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此if __name__ main: 的作用就是控制这两种情…