在ListView中使用BaseAdapter进行适配
首先我不否认,我们可以不使用Adapter甚至是BaseAdapter来进行适配就能达到某种效果。
但是,我们的LisView的Item多了之后,可能就会导致有很多冗余。而且,你有没有想过一个问题,如果我们要对某一项进行某种操作,比如说是点击操作。这样一来,势必会很麻烦。所以,我们可以尝试另一种比较好的方式,那就是使用Adapter来适配。在所有的Adapter中,个人还是比较中意BaseAdapter,它不像ListAdapter这些Adapter这么局限。好了,下面我们就来说说这个BaseAdapter吧。
它有一个getCount()的抽象方法,这个方法是说明当前的BaseAdapter需要加载多少项数据。
@Overridepublic int getCount() {if (mModels != null) {return mModels.size();}return 0;}
上面的代码中,mModels的定义如下:
private ArrayList<EyeWebSiteModel> mModels;
所以,上面我们重写的getCount()方法就是mModels的大小,因为我们要适配每一个EyeWebsiteModel。
getItem(int position)和getItemId(int position)就没什么好说的了,重点是getView(int position, View view, ViewGroup parent)这个方法。
顾名思义,getView就是获得一个View,它要是一个View,这个View会从方法的第二个参数传入,然后我们在方法里面,对这个View进行我们需要的操作,例如,重命名什么的。因为View都拿到了,爱怎么操作还是按自己想着的来?
我现在在这里介绍在Adapter中一种比较常见的方法,那就是在我们View还没有加载的时候才加载,如果已经加载过了,那就去获得这个View。
大家可以看看下面这几行代码:
private class ViewHolder {public TextView mSerialTextView = null;public TextView mWebSiteTextView = null;public ViewHolder(View v) {mSerialTextView = (TextView) v.findViewById(R.id.fragment_eye_data_select_list_item_serial_textview);mWebSiteTextView = (TextView) v.findViewById(R.id.fragment_eye_data_select_list_item_website_textview);}}
这里,这个ViewHolder类就起到了一个缓冲的作用。我们在getView()方法中其实就是对这个ViewHolder类进行操作。如下:
@Overridepublic View getView(int position, View view, ViewGroup parent) {ViewHolder viewHolder = null;if (view == null || view.getTag() == null) {view = mLayoutInflater.inflate(R.layout.fragment_eye_data_select_list_item_layout, null);viewHolder = new ViewHolder(view);view.setTag(viewHolder);} else {viewHolder = (ViewHolder) view.getTag();}EyeWebSiteModel model = mModels.get(position);viewHolder.mSerialTextView.setText("" + (position + 1));viewHolder.mWebSiteTextView.setText(model.getmWebsite());return view;}
而在Fragment或是Activity中适配的过程也很简单:
ListView selectListView = (ListView) v.findViewById(R.id.fragment_eye_data_select_listview);final ArrayList<EyeWebSiteModel> models = EyeSelectDataListFragmentMBLL.getMergeWebSiteModelsAll(getActivity());if (models == null) {return v;}EyeSelectDataListFragmentAdapter adapter = new EyeSelectDataListFragmentAdapter(getActivity(), models);selectListView.setAdapter(adapter);
具体的实现过程(EyeSelectDataListFragment.java和EyeSelectDataListFragmentAdapter.java),可以参考:点击打开链接
在ListView中使用BaseAdapter进行适配相关推荐
- 简单图库软件的实现(联网下载图片保存到sdcard在Listview中展示,并作为ContentProvider为其他软件提供图库数据)
先看效果图: 这就是一个可以联网的图库软件,下面我们来看看需求 业务需求 1.判断是否第一次运行,第一次运行,提示添加新条目 2.点击添加按钮,弹出对话框,输入图片网址和标题 3.下载图片保存到本地S ...
- Android在ListView中嵌套一个GridView时只显示一行的原因及解决方法
在之前的编程里,我还没有遇到过要在一个ListView中嵌套一个GridView或是在一个GridView中嵌套一个ListView.所以今天事儿来了!我花了一将近3个小时,找到了为什么我在一个Lis ...
- Android Listview中Button按钮点击事件冲突解决办法
今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...
- android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter
我最近做项目用到了基本适配器BaseAdapter,所以写篇博客总结一下,希望也能对你有所帮助 什么时候用BaseAdapter(同一项存在多个控件,复杂的列表时) Android中Adapter类其 ...
- android 部分区域点击,Android编程实现ListView中item部分区域添加点击事件功能
本文实例讲述了Android编程实现ListView中item部分区域添加点击事件功能.分享给大家供大家参考,具体如下: 需求如题目:Android listview中item部分区域添加点击事件,在 ...
- Android ListView中 每一项都有不同的布局
实现代码 Adapter的代码 其中:ViewHolder分别是三个不同的布局,也就是ListView中每一项的布局 TYPE_1...是三种类型. 在使用不同布局的时候,getItemViewTyp ...
- 设置ListView中的所有Item均不可点击
设置ListView中的所有Item均不可点击 正常地说一般要是使一个控件不可点击,不外乎使用以下几种方法 - setEnable - setClickable - setFocusable 但是对于 ...
- 在ListView中嵌套Switch开关,点击ListView条目来切换Switch的状态
在ListView中添加Switch,让用户去点那个小小的开关的话体验不太好,通过点 击ListView的条目来改变Switch的开关状态. 目标效果 点击测试即可切换第一行的Swith的开关状态 需 ...
- ListView 自己定义BaseAdapter实现单选打勾(无漏洞)
ListView 自己定义BaseAdapter实现单选打勾(无漏洞) (假设须要完整demo,请评论留下邮箱) (眼下源代码已经不发送.假设须要源代码,加qq316701116.不喜勿扰) 近期由于 ...
最新文章
- (转)static 变量
- 洛谷 4568 [JLOI2011] 飞行路线
- 逆推继承看原型 函数的角色 函数声明和函数表达式的区别 函数中this指向的问题
- php请求脚本,同时请求PHP脚本
- 使用myeclipse建立maven项目(重要)
- 让你开回家过年!特斯拉计划春节前开始交付国产Model 3
- 【Flink】Flink on yarn 支持指定 application id 吗? yarn.application.id
- java wait() notify_Java的wait(), notify()和notifyAll()使用小结
- EMS设置发送连接器和接收连接器邮件大小
- 【图像处理】基于matlab分形插值算法调换图片【含Matlab源码 197期】
- python画散点图分布-python中画散点图
- Virtualbox安装Windows7虚拟机
- 解决WPS word论文英文摘要不对齐的问题
- 哥伦比亚大学 Schulzrinne 教授:撰写科研论文详细教程
- Nefu 锐格c实验8
- 断网怎么装网卡驱动?
- Python骚操作,让图片上的人物动起来!
- c++ opencv fitLine函数拟合直线
- C语言 读写锁pthread_rwlock_init
- 卸载conda安装的环境