首先我不否认,我们可以不使用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进行适配相关推荐

  1. 简单图库软件的实现(联网下载图片保存到sdcard在Listview中展示,并作为ContentProvider为其他软件提供图库数据)

    先看效果图: 这就是一个可以联网的图库软件,下面我们来看看需求 业务需求 1.判断是否第一次运行,第一次运行,提示添加新条目 2.点击添加按钮,弹出对话框,输入图片网址和标题 3.下载图片保存到本地S ...

  2. Android在ListView中嵌套一个GridView时只显示一行的原因及解决方法

    在之前的编程里,我还没有遇到过要在一个ListView中嵌套一个GridView或是在一个GridView中嵌套一个ListView.所以今天事儿来了!我花了一将近3个小时,找到了为什么我在一个Lis ...

  3. Android Listview中Button按钮点击事件冲突解决办法

    今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...

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

    我最近做项目用到了基本适配器BaseAdapter,所以写篇博客总结一下,希望也能对你有所帮助 什么时候用BaseAdapter(同一项存在多个控件,复杂的列表时) Android中Adapter类其 ...

  5. android 部分区域点击,Android编程实现ListView中item部分区域添加点击事件功能

    本文实例讲述了Android编程实现ListView中item部分区域添加点击事件功能.分享给大家供大家参考,具体如下: 需求如题目:Android listview中item部分区域添加点击事件,在 ...

  6. Android ListView中 每一项都有不同的布局

    实现代码 Adapter的代码 其中:ViewHolder分别是三个不同的布局,也就是ListView中每一项的布局 TYPE_1...是三种类型. 在使用不同布局的时候,getItemViewTyp ...

  7. 设置ListView中的所有Item均不可点击

    设置ListView中的所有Item均不可点击 正常地说一般要是使一个控件不可点击,不外乎使用以下几种方法 - setEnable - setClickable - setFocusable 但是对于 ...

  8. 在ListView中嵌套Switch开关,点击ListView条目来切换Switch的状态

    在ListView中添加Switch,让用户去点那个小小的开关的话体验不太好,通过点 击ListView的条目来改变Switch的开关状态. 目标效果 点击测试即可切换第一行的Swith的开关状态 需 ...

  9. ListView 自己定义BaseAdapter实现单选打勾(无漏洞)

    ListView 自己定义BaseAdapter实现单选打勾(无漏洞) (假设须要完整demo,请评论留下邮箱) (眼下源代码已经不发送.假设须要源代码,加qq316701116.不喜勿扰) 近期由于 ...

最新文章

  1. (转)static 变量
  2. 洛谷 4568 [JLOI2011] 飞行路线
  3. 逆推继承看原型 函数的角色 函数声明和函数表达式的区别 函数中this指向的问题
  4. php请求脚本,同时请求PHP脚本
  5. 使用myeclipse建立maven项目(重要)
  6. 让你开回家过年!特斯拉计划春节前开始交付国产Model 3
  7. 【Flink】Flink on yarn 支持指定 application id 吗? yarn.application.id
  8. java wait() notify_Java的wait(), notify()和notifyAll()使用小结
  9. EMS设置发送连接器和接收连接器邮件大小
  10. 【图像处理】基于matlab分形插值算法调换图片【含Matlab源码 197期】
  11. python画散点图分布-python中画散点图
  12. Virtualbox安装Windows7虚拟机
  13. 解决WPS word论文英文摘要不对齐的问题
  14. 哥伦比亚大学 Schulzrinne 教授:撰写科研论文详细教程
  15. Nefu 锐格c实验8
  16. 断网怎么装网卡驱动?
  17. Python骚操作,让图片上的人物动起来!
  18. c++ opencv fitLine函数拟合直线
  19. C语言 读写锁pthread_rwlock_init
  20. 卸载conda安装的环境

热门文章

  1. HDU-2149(博弈)
  2. 汉字输入练习 TypeChinese.java
  3. CSS之关系选择器、属性选择器、伪类选择器
  4. Fabric--测试链码
  5. 2020-11-14(移位运算)
  6. 003 通过内存关系找万能按键call
  7. 【Laravel Cache】 配置redis 存储缓存,通俗易懂,一次就掌握
  8. hdu 2007题解
  9. 第四届“传智杯”全国大学生IT技能大赛(决赛B组)【题解】
  10. 一个判断字符是不是10进制数的函数------isdigit()