iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android自定义实现BaseAdapter的普通实现
  • 540
分享到

Android自定义实现BaseAdapter的普通实现

baseadapterAndroid 2022-06-06 07:06:02 540人浏览 八月长安
摘要

对于ListVie来说,数据项的设置有很多种方式,而自定义实现BaseAdapter是最经常用的了,那么这里我们来讲解一下自定义实现BaseAdapter的普通实现。 Main

对于ListVie来说,数据项的设置有很多种方式,而自定义实现BaseAdapter是最经常用的了,那么这里我们来讲解一下自定义实现BaseAdapter的普通实现。

MainActivity.java


public class MainActivity extends AppCompatActivity {
  //数据源
  private List<String> data;
  //ListView控件
  private ListView mList;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //获取控件ID
    mList = (ListView)findViewById(R.id.mList);
    data = new ArrayList<>();
    //数据赋初值
    for(int i = 0; i < 20; i ++){
      data.add("数据项"+ i);
    }
    //创建适配器
    MyAdapter adapter = new MyAdapter(data);
    //设置适配器
    mList.setAdapter(adapter);
  }
}

MyAdapter.java


public class MyAdapter extends BaseAdapter {
  //数据项
  private List<String> data;
  public MyAdapter(List<String> data) {
    this.data = data;
  }
  @Override
  
  public int getCount() {
    return data == null ? 0 : data.size();
  }
  
  @Override
  public Object getItem(int position) {
    return data.get(position);
  }
  
  @Override
  public long getItemId(int position) {
    return position;
  }
  
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    //获取布局
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item,null);
    //获取布局中的TextView控件1
    TextView tv1 = (TextView) view.findViewById(R.id.mTv1);
    //设置控件1的数据
    tv1.setText(data.get(position));
    //获取布局中的TextView控件2
    TextView tv2 = (TextView) view.findViewById(R.id.mTv2);
    //设置控件2数据
    tv2.setText(data.get(position));
    return view;
  }
}

以上是普通的使用,但是这样的效率会非常低,因为每次加载一个item都会调用getView方法,而每次都会去解析一个view布局,这样一直解析会对内存的消耗特别大,所以效率会大大降低,那么我们在此基础上先稍微优化下,让view解析次数变少一点,最基本的操作就是采用convertView复用控件来进行操作。

这里只需要修改getView方法中的处理:


  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    Log.i("TAG", "getView: " + position);
    if (convertView == null) {
      convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, null);
    }
    TextView tv1 = (TextView) convertView.findViewById(R.id.mTv1);
    tv1.setText(data.get(position));
    TextView tv2 = (TextView) convertView.findViewById(R.id.mTv2);
    tv2.setText(data.get(position));
    return convertView;
  }
}

以上的处理方式相比上面的处理方式相对于上面的解析要少很多次,因为第一种实现方式是任何一个需要显示的控件都需要去解析一次布局,而这里我们使用了系统给的converView复用控件,他的基本原理是,系统会自动创建好界面显示n个item的数据项(比如一个界面可见的item为5个,默认创建好了5个view布局对象),保存到converView中(这里可以把他当成一个循环数组吧,他的总容量相当于是n + 1),当显示第n + 1个的时候,他会解析一次,之后的显示的view布局会复用自己的converView中已经存在的布局项,而不再去重新解析。简单的画个图吧:

如上图所示,相当于只解析了6次,其他的view都是复用的,所以相对于上面的实现,这样的效率会相对高一点,不过,虽然解析的次数是少了,但是每个控件需要findViewById还是会重复调用,而且其实每个不同对象view中的控件id对象肯定是相同的,所以,重复的去调用又会显得效率不高,那么如何解决不重复findViewById呢,那就要使用到我们的优化布局了,关于优化,将在下一篇博客中介绍。

您可能感兴趣的文章:Android代码实现AdapterViews和RecyclerView无限滚动Android listview与adapter详解及实例代码Android自定义实现BaseAdapter的优化布局Android中BaseAdapter的用法分析与理解Android中BaseAdapter用法示例举例讲解Android应用中SimpleAdapter简单适配器的使用详解Android App中ViewPager使用PagerAdapter的方法python设计模式编程中Adapter适配器模式的使用实例C#使用sqlDataAdapter对象获取数据的方法RecyclerView Adapter辅助类详解及示例代码


--结束END--

本文标题: Android自定义实现BaseAdapter的普通实现

本文链接: https://www.lsjlt.com/news/24280.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android如何实现自定义可复用的BaseAdapter
    这篇文章主要讲解了“Android如何实现自定义可复用的BaseAdapter”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android如何实现自定义可复用的BaseAdapter”吧!项...
    99+
    2023-07-04
  • Android自定义LocationMarker的实现详解
    目录自定义View LocationMarker应用自定义View到AMapView中今天讲一个比较简单的东西自定义绘制Marker 其实就是自定义view, 跟轨迹没太多关联,还有...
    99+
    2023-02-10
    Android自定义LocationMarker Android LocationMarker
  • Android实现自定义曲线图
    一般来说应用中比较常见的是折线图,直方图这种比较多,今天来写一个项目中的需求曲线图,也是在之前的折线图基础上改进而来,看效果图 主要考虑曲线的实现以及阴影部分的实现 先看代码: i...
    99+
    2024-04-02
  • Android通过自定义Activity实现悬浮的Dialog详解
    前言其实实现悬浮的自定义窗体有很多方法,自定义Dialog,自定义layout 均可以实现。自定义activity也是可以的,今天我就介绍一下activity的实现方法。下面来看看详细的介绍:效果图如图可以看出,当前的窗体,第一眼其实和di...
    99+
    2023-05-31
    android 悬浮dialog 自定义activity
  • Android中怎么通过自定义View实现画圆
    Android中怎么通过自定义View实现画圆,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。引入布局<xml version="1.0...
    99+
    2023-05-30
    android
  • android中怎么通过自定义Camera实现拍照
    android中怎么通过自定义Camera实现拍照,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、打开相机a.预览拍摄图片,需用到SurfaceView,并且...
    99+
    2023-05-31
    android camera
  • Android自定义实现可回弹的ScollView
    前言 仿IOS回弹效果为了增强用户体验,自定义一个可回弹的ScrollView是一个不错的选择,而且这种效果还是很简单的 把原来的ScollView标签替换一下就好了 <xm...
    99+
    2024-04-02
  • Android中怎么通过自定义view实现TopBar效果
    这篇文章给大家介绍Android中怎么通过自定义view实现TopBar效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。布局文件<xml version="1.0" en...
    99+
    2023-05-30
    android view topbar
  • Android自定义实现日历控件
    本文实例为大家分享了Android自定义实现日历控件的具体代码,供大家参考,具体内容如下 1. Calendar类 2. 布局 创建calendar_layout.xml <...
    99+
    2024-04-02
  • Android Compose自定义TextField如何实现自定义的输入框
    这篇文章主要介绍Android Compose自定义TextField如何实现自定义的输入框,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!简单自定义BasicTextField示例代码 var&n...
    99+
    2023-06-29
  • Android实现绚丽的自定义进度条
    目录前言效果图实现步骤1.绘制背景圆形矩形2.绘制进度3.绘制文字4.加入动画 完整代码前言 进度条是在Android项目中很常用的组件之一,如果想要理解它是怎么实现的,首...
    99+
    2024-04-02
  • Android自定义对话框的简单实现
    本文实例为大家分享了Android自定义对话框的具体实现代码,供大家参考,具体内容如下 1、定义对话框的布局 <xml version="1.0" encoding="utf-...
    99+
    2024-04-02
  • MyBatis-Plus自定义通用的方法实现
    目录一、引言二、自定义方法实现一、引言 大家已知MP给大家提供了很多通用的方法,可以看看MP源码中DefaultSqlInjector这个类,在这个集合当中包含了都是通用方法类,如果...
    99+
    2023-05-19
    MyBatis-Plus自定义通用 MyBatis-Plus自定义
  • Android如何实现自定义Dialog的大小
    小编给大家分享一下Android如何实现自定义Dialog的大小,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:Android应用开发中,无论是出于功能还...
    99+
    2023-05-30
    android dialog
  • Android通过自定义view实现刮刮乐效果详解
    目录前言实现原理关键步骤创建bitmap绘制文字画路径完整代码前言 已经有两个月没有更新博客了,其实这篇文章我早在两个月前就写好了,一直保存在草稿箱里没有发布出来。原因是有一些原理性...
    99+
    2024-04-02
  • Android自定义View实现气泡动画
    本文实例为大家分享了Android自定义View实现气泡动画的具体代码,供大家参考,具体内容如下 一、前言 最近有需求制作一个水壶的气泡动画,首先在网上查找了一番,找到了一个文章:A...
    99+
    2024-04-02
  • Android自定义ViewGroup实现选择面板
    目录背景效果思路完整代码使用背景 在做社交类平台开发的小伙伴都躲不开选择社交个性标签的业务需求,那么实现这个UI效果我想大伙第一时间想到的必定是RecycleView或GridVie...
    99+
    2024-04-02
  • Android如何实现自定义View中attrs.xml
    这篇文章主要为大家展示了“Android如何实现自定义View中attrs.xml”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android如何实现自定义View中attrs.xml”这篇文章...
    99+
    2023-05-30
    android view attrs.xml
  • Android自定义控件实现时间轴
    本文实例为大家分享了Android自定义控件实现时间轴的具体代码,供大家参考,具体内容如下 由于项目中有需求,就简单的封装一个,先记录一下,有时间上传到github。 1、先增加自定...
    99+
    2024-04-02
  • Android自定义ScrollView实现阻尼回弹
    Android开发中,当一个页面存放的控件超出屏幕时,通常需要使用ScrollView来包裹布局。这样用户可以通过手指的滑动来查看超出屏幕的部分。然而当ScrollView滑动到边界...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作