本节引言: 上一节中我们学习了如何来使用一个ListView以及自定义一个简单的BaseAdapter,我们从代码中可以看出比较重要的两个方法:getCount()和getView(),界面上有多少列就会调用多少次...所以学习ListView的优化很重要,而本节针对的是BaseAdapter的优化,优化的两点有,复用convertView 以及使用ViewHolder重用组件,不用每次都findViewById,我们具体通过代码来体会吧...而为何将ViewHolder设置为静态类的原因可以用如下B神的话来描述: 没错就是这么简单,你以后BaseAdapter照着这个模板写就对了,哈哈,另外这个修饰ViewHolder的 static,关于是否定义成静态...——Berial(B神)原话~ ---- 本节小结: 好的,关于BaseAdapter的优化大概就上述的两种,非常简单,复用ConvertView以及自定义ViewHolder 减少findViewById...()的调用如果你有其他关于BaseAdapter优化的建议欢迎提出,谢谢
1.自定义BaseAdapter,然后绑定ListView的最简单例子 先看看我们要实现的效果图: ?...BaseAdapter的编写~ 补充:如何重写BaseAdapter 首先学习Android还是秉持从先会使用SDK提供的代码框架开始,掌握了方法的使用,如果有需要再去针对于某一个框架实现要点学习源码方面的知识...对于一个BaseAdapter的子类来说,我们需要重写BaseAdapter中的几个抽象方法,但是抽象方法是被如何调用的,我们在此不妨先不去深究,只需知道被重写的方法是用于何种目的,我们只需秉持:“调用逻辑是由组件负责...事实上没有报,这是因为BaseAdapter方法并没有内部调用此方法,此方法修饰为public就是为了方便程序员进行调用,而BaseAdapter内部早就集成了访问列表元素的方法。...BaseAdapter内部为何使用LinkedList而不是其他数据结构?
都用过 BaseAdapter的notifyDataSetChanged()方法,用法很简单,当BaseAdapter的数据更新了,需要更改显示,这时候就要调用notifyDataSetChanged(...那么BaseAdapter又是怎么一回事呢?...细心的同学可能会发现,在BaseAdapter中以notify开头的函数有四个,其实都是跟通知有关的,但是前两个是Object函数中实现的,用于线程的锁相关的。我们只关心后两个。...值得一提的是,这个函数在Adapter类中并不存在,是baseAdapter中才出现的。...而这两个函数的实现确实在BaseAdapter中,BaseAdapter同时实现了ListAdapter和SpinnerAdapter接口,所以大家通常情况下只要使用baseAdapter就行了,在BaseAdapter
BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类...例子:自定义列表适配器 MyListAdapter.java代码 package com.example.baseadapter; import java.util.List; import java.util.Map...android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter...import android.widget.ImageView; import android.widget.TextView; public class MyListAdapter extends BaseAdapter...listdata.get(position).get("icon").toString())); return v; } } BaseActivity.java代码 package com.example.baseadapter
这时候最方便的方法就是使用灵活的适配器BaseAdapter了。...一、使用BaseAdapter BaseAdapter是Android应用程序中经常用到的基础数据适配器的基类,它实现了Adapter接口。...由于BaseAdapter是一个抽象类,所以使用BaseAdapter时必须有一个类继承它,并实现它的方法。BaseAdapter的灵活性就在其要重写的很多方法,常会重写的几个方法如下。...,代码如下: package com.jinyu.cqkxzsxy.android.listviewsample.entity; /** * @创建者 鑫鱻 * @描述 Android零基础入门到精通系列教程...com.jinyu.cqkxzsxy.android.listviewsample.entity.Data; import java.util.List; /** * @创建者 鑫鱻 * @描述 Android零基础入门到精通系列教程
findViewById(R.id.lv); //设置适配器 listView.setAdapter(new MyAdapter()); } //定义MyAdapter继承BaseAdapter...class MyAdapter extends BaseAdapter { @Override public int getCount() { //返回显示元素的个数
网上好多例子都是简单使用 ArrayAdapter 来实现的,界面比较简单,实际项目中用处不大;自己研究了一番,自定义Adapter 继承BaseAdapter 并实现Filterable 接口 实现了上述功能...android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter...android.widget.TextView; import com.example.actv.entity.PhoneContact; public class PhoneAdapter extends BaseAdapter
afterTextChanged(Editable s) { } }); 但是很多时候我们不可能用ArrayAdapter这么简单的适配器,更多的时候是要继承BaseAdapter...2.基于BaseAdapter的过滤 网上其实也有相关的解决方案,但是只告诉你怎么做,却没告诉你原理。...那么arrayadapter的源码也基本看懂,那么接下来我们也来自己做一个 class MyAdapter extends BaseAdapter { private MyFilter
我们可以把这写实现放如到ViewHolder中去,在ViewHolder中写入一个链式的方法,来帮助我们来实现功能(关于ViewHodler类的代码我就不再重复写了,代码在此:Android之自定义实现BaseAdapter...setText(R.id.mTv2, t.getSex()); } } MyBaseAdapter.java public abstract class MyBaseAdapter<T extends BaseAdapter
一、使用convertView 前面讲的自定义ArrayAdapter和自定义BaseAdapter,都会重写getView()方法,虽然可以正常使用,但其实效率非常低。...接下来就在“自定义BaseAdapter”的基础上来开始优化,除了MyBaseAdapter类的getView()方法代码会发生改变,其他不变。...com.jinyu.cqkxzsxy.android.listviewsample.entity.Data; import java.util.List; /** * @创建者 鑫鱻 * @描述 Android零基础入门到精通系列教程...接下来继续在“自定义BaseAdapter”的基础上来开始优化,除了MyBaseAdapter类中增加一个持有者类和修改getView()方法代码,其他不变。...com.jinyu.cqkxzsxy.android.listviewsample.entity.Data; import java.util.List; /** * @创建者 鑫鱻 * @描述 Android零基础入门到精通系列教程
首先写一个类继承BaseAdapter 1....android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter...import android.widget.GridView; import android.widget.ImageView; public class ImageAdapter extends BaseAdapter...="columnWidth" android:gravity="center" / 更多关于Android相关内容感兴趣的读者可查看本站专题:《Android控件用法总结》、《Android开发入门与进阶教程
代码如下: package com.jinyu.cqkxzsxy.android.advancedviewsample.entity; /** * @创建者 鑫鱻 * @描述 Android零基础入门到精通系列教程...com.jinyu.cqkxzsxy.android.advancedviewsample.entity.ViewSwitcherItemData; import java.util.List; /** * @创建者 鑫鱻 * @描述 Android零基础入门到精通系列教程...,欢迎关注微信公众号ShareExpert */ public class ViewSwitcherBaseAdapter extends BaseAdapter { private Context...的方式为GridView提供Adapter,关键就是根据用户单击的按钮来动态计算该BaseAdapter应该显示哪些程序列表。...使用Activity类的screenNo保存当前正在显示第几屏的程序列表,BaseAdapter会根据screenNo 动态计算该Adapter总共包含多少个列表项(如getCount()方法所示),会根据
savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //创建一个BaseAdapter...对象,该对象负责提供Gallery所显示的列表项 flipper = (AdapterViewFlipper) findViewById(R.id.flipper); BaseAdapter...adapter = new BaseAdapter() { @Override public int getCount() { return imageIds.length...自动播放" / </RelativeLayout 搞定 啥都不要 就这么简单~ 更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程
android.view.View; import android.view.ViewGroup; import android.widget.AdapterViewFlipper; import android.widget.BaseAdapter...flipper = (AdapterViewFlipper)findViewById(R.id.afilper); // 为获取AdapterViewFlipper添加适配器 BaseAdapter...adapter = new BaseAdapter() { @Override public int getCount() {...void auto(View source){ flipper.startFlipping(); } } 运行结果 image.png image.png 参考 Android零基础入门第
layout_height="wrap_content" android:loopViews="true" /> 创建一个MyStackAdapter类,继承BaseAdapter...android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter...; import android.widget.ImageView; /** * @创建者 鑫鱻 * @描述 Android零基础入门到精通系列教程,欢迎关注微信公众号ShareExpert...*/ public class MyStackAdapter extends BaseAdapter { private Context mContext = null; private...imageView.setImageResource(mImageIds[position]); return imageView; } } 接下来为StackView提供Adapter,使用自定义的BaseAdapter
的布局给上层布局添加一个: android:clickable="false" android:focusable="false" 就是禁止点击,但试了试没有效果,后来师傅提醒我,我的这个listview使用的适配器是BaseAdapter...Relativelayout的id,然后给这个布局添加点击事件,就可以实现部分区域响应事件,事实证明是非常可行的,贴出主要的代码如下: // 开仓单适配器 public class OrderAdapter extends BaseAdapter...更多关于Android相关内容感兴趣的读者可查看本站专题:《Android控件用法总结》、《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity
ListView、GridView等等),Android提供了五花八门的适配器用于组装某个规格的数据,常见的适配器有:数组适配器ArrayAdapter、简单适配器SimpleAdapter、基本适配器BaseAdapter...到了列表视图ListView这里,与之搭档的一般是基本适配器BaseAdapter,这个BaseAdapter更不简单,基于它的列表适配器得重写好几个方法,还有那个想让初学者撞墙的ViewHolder。...总之,每当要实现类似新闻列表、商品列表之类的页面,一想到这个难缠的BaseAdapter,心里便发怵。譬如下图所示的六大行星的说明列表,左侧是图标,右边为文字说明,很普通的一个页面。 ?...可是这个行星列表页面,倘若使用Java编码,就得书写下面一大段长长的代码: public class PlanetJavaAdapter extends BaseAdapter { private...至此基于BaseAdapter的Kotlin列表适配器告一段落,上述的适配器代码模版,同时适用于列表视图ListView与网格视图GridView。 点此查看Kotlin入门教程的完整目录
layout_alignParentRight="true" android:text="自动播放"/> 创建一个MyFilpperAdapter类,继承BaseAdapter...android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter...; import android.widget.ImageView; /** * @创建者 鑫鱻 * @描述 Android零基础入门到精通系列教程,欢迎关注微信公众号ShareExpert...*/ public class MyFilpperAdapter extends BaseAdapter { private Context mContext = null; private...(mImageIds[position]); return imageView; } } 接下来为AdapterViewFilpper提供Adapter,使用自定义的BaseAdapter
,代码如下: package com.jinyu.cqkxzsxy.android.listviewsample.entity; /** * @创建者 鑫鱻 * @描述 Android零基础入门到精通系列教程...void setContent(String content) { this.content = content; } } 再创建MyUpdateAdapter类,继承BaseAdapter...com.jinyu.cqkxzsxy.android.listviewsample.entity.UpdateData; import java.util.LinkedList; import java.util.List; /** * @创建者 鑫鱻 * @描述 Android零基础入门到精通系列教程...,欢迎关注微信公众号ShareExpert */ public class MyUpdateAdapter extends BaseAdapter { private Context mContext...{ ImageView img_icon; TextView txt_content; } } 接下来为ListView提供Adapter,使用自定义的BaseAdapter
> * 传入的数据类型 * @param * ViewHoler的类型 */ public abstract class BaseAdapter... extends android.widget.BaseAdapter { /** *...List list = new ArrayList(); private List outer_list; public BaseAdapter
领取专属 10元无门槛券
手把手带您无忧上云