首页
学习
活动
专区
圈层
工具
发布

Android面试题之Listview篇

前言 秋招在即,计蒙准备在国庆假期结束前整理一套Android初级面试题籍,希望对大家有所帮助 提示:以下是本篇文章正文内容 ListView 1.当 ListView 数据集改变后,如何更新 ListView...在监听器中有两个方法:滚动状态发生变化的方法(onScrollStateChanged)和 listView 被滚动时调用的方法(onScroll) ② 在滚动状态发生改变的方法中,有三种状态: 手指按下移动的状态...在每次加载的时候,计算出滚动的数量,当滚动的数量大于等于总数量的时候,可以提示用户无更多数据了。 3.如何刷新 ListView 中单个 item 的数据,不刷新整个 ListView 的数据?...当 convertView 为空时,用 setTag()方法为每个 View 绑定一个存放控件的 ViewHolder 对象。...当convertView 不为空,重复利用已经创建的 view 的时候,使用 getTag()方法获取绑定的 ViewHolder对象,这样就避免了 findViewById 对控件的层层查询,而是快速定位到控件

3400
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    用 managedQuery() 时须要注意的一个陷阱

    听起来非常好,Activity 能够替你管理 Cursor 的生命周期了,就不用记着去 close() 了,代码能够更简洁。 可是 Activity 是怎么去管理 Cursor 的生命周期的呢?...近期遇到一个 bug,在一个 Activity 中,用 managedQuery() 查询数据库,将查询得到的 Cursor 用 CursorAdapter 与 ListView 绑定。...測试团队发现的 bug 是,在删除操作进行过程中,假设按下 Home 键,应用就崩溃了。崩溃原因是 Cursor 被释放了,导致工作线程的删除操作异常。...managedQuery() 事实上无非就是把查询得到的 Cursor 放到了 Activity 类的一个数组成员变量中,然后当 Activity stop 的时候,将这个数组里的每一个 cursor...都关掉,以及在 resume 的时候,将数组里的每一个 cursor 都又一次查询一次。

    21720

    Android Architecture Paging Library详解 | Google IO大会上的最新发布

    /widget/CursorAdapter.html)使得获取数据库查询结果更加容易的映射到ListView项目中,但是它的查询操作是在UI线程上运行的,并且以低效的方式使用Cursor。...setEnablePlaceholders:当Item为null时是否使用PlaceHolder展示。...我们通常都是用LiveData承载PagedList对象,当数据变化的时候通过Lifecycles能收到通知,我们可以调用PagedListAdapter的submitList(PagedList)方法更新数据...当创建LiveData时候,LiveData会新建一个线程从DataSource中加载数据(触发loadInitial()),DataSource加载到数据会更新PagedList...我们用DataSource建立分页数据源,实现了ItemKeyedDataSource对应的抽象方法,定义加载第一页以及后面每一页数据。 4、PagedListAdpater建立与数据的绑定 ?

    1.6K20

    Android开源库:手把手教你实现一个简单好用的搜索框(含历史搜索记录)

    总体设计 下面,将根据功能需求给出特定的技术解决方案 5.1 总体解决方案 ? 5.2 项目结构说明 项目工程示意图 ?...* 监听方法:onTextChanged() & onFocusChanged() * 调用时刻:当输入框内容变化时 & 焦点发生变化时 */ @Override...= X2 // 所以X1与X2之间的区域 = 删除图标的区域 // 当手指抬起的位置在删除图标的区域(X2=<event.getX()...(cursor.getCount()); // 当输入框为空 & 数据库中有搜索记录时,显示 "删除搜索记录"按钮 if (tempName.equals("") &&...当输入框为空 & 数据库中有搜索记录时,才显示 "删除搜索记录"按钮 if (tempName.equals("") && cursor.getCount() !

    3.3K10

    ListView详细介绍与使用

    当需要显示数据的时候,ListView 会从适配器(Adapter)中取出数据,然后来加载数据。...解决方案: 为了节省内存的占用,ListView 是不会为每一条数据创建一个视图的,而是采用了 Recycler组件 的方式。回收和复用 View。 那么是如何来复用的呢?...假如当屏幕一次可以显示 x 个 item 时(不用是完整的),那么 ListView 会创建 x+1 个视图;当第1个 item 离开屏幕的时候,此时这个 item 的 View 就会被回收,再入屏的...CursorAdapter:用于绑定游标(直接从数据库取出数据)作为列表项的数据源,和数据库有关系,不常用。...的长度逐一绘制 ListView 的每一行 获取数据时,通过 getItem() getItemId() 来获取 Adapter 中的数据 重点看一下 getView 实现方式一: 直接返回索引对应的数据的视图

    1.7K20

    RecyclerView面试宝典:7大高频问题解析,面试必备!

    本文旨在深入探讨与RecyclerView相关的高频面试问题,并提供详尽的解答技巧,帮助求职者在面试中脱颖而出。 功能理解 问题: RecyclerView与ListView有什么不同?...与AttachedScrap不同,这些ViewHolders已经从RecyclerView中彻底分离,但是它们的数量有限制,默认是2个。...当数据发生变更时,LayoutManager决定哪些视图需要被重新布局,哪些可以保持不变。...出发点: 考察面试者对并发数据操作中常见问题的理解及其解决方案,特别是在动态数据集合操作时如何保持数据一致性和应用稳定性。...当setHasStableIds(true)被调用时,RecyclerView可以使用这些稳定的ID来避免重复的布局计算和视图重绘,因为它知道即使数据发生变化,每个列表项的ID仍然保持不变。

    91700

    RecyclerView技术栈参考资料:

    滚出可见区域的条目将被回收,并在下一个条目可见的时候被复用。 我们可以从下图中得到更直观的解释: ? 左边的图是数据初始化后的示例,当向上滚动视图的时候,当条目不可见之后将被回收。...右图中红色区域内的两条不可见条目,将被放到缓存队列中以便新的条目可见时进行复用。...但是回想之前我们写的ListView,无论从它的的性能表现着手,还是语法的书写,甚至数据的绑定都未免略显臃肿。...与传统ListView比较 RecyclerView与老前辈ListView的不同点,主要在于以下几个特性: Adapter中的ViewHolder模式 - 对于ListView来说,通过创建ViewHolder...一是,根据不同ViewType创建与之相应的的Item-Layout,二是,访问数据集合并将数据绑定到正确的View上。

    1.5K10

    Android回调接口的写法

    =null && cookie instanceof CursorAdapter){ CursorAdapter adapter = (CursorAdapter) cookie; // 给...cursorChangedListener; } private IOnCursorChangedListener cursorChangedListener; /** * 声明,cursor改变时的监听接口...{ // 让listview 显示最后一行 listView.setSelection(adapter.getCount()-1); } });   实例2: private...回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 如何定义一个回调 a....对象 2、在Fragment中的某个方法内,使用接口的实例,调用Activity的方法,向Activity通信 3、Activity实现接口与结构内的方法,实现处理回调的逻辑

    4.9K50

    Android设计模式学习之观察者模式

    概述 观察者模式又被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。...抽象观察者(Observer):为所有的具体观察者定义一个接口,在得到主题通知时更新自己。...具体观察者(ConcreteObserver):实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题状态协调。...在AdapterDataSetObserver的onChanged函数中会获取Adapter中数据集的新数量,然后调用ListView的requestLayout()方法重新进行布局,更新用户界面。...从而使得各自的变化都不会影响另一边的变化。 缺点 依赖关系并未完全解除,抽象通知者依旧依赖抽象的观察者。 适用场景 当一个对象的改变需要给变其它对象时,而且它不知道具体有多少个对象有待改变时。

    35610

    Android开发之ListView使用经验分享

    在Android开发中,ListView是使用最广泛的组件之一,虽然谷歌推出了RecycleView,但是很多项目中依旧在使用ListView,本文将总结一下使用过程中遇到的一些问题,与大家共勉~~~...一、ListView 与 Adapter ListVeiw本身是一个容器组件,需要通过Adapter来完成数据的显示,即通过setAdapter方法完成,而这个方法的参数是ListAdapter接口的对象...意思是将Map对象中key为userId 的value绑定到 R.id.userId上,userName的value绑定到 R.id.userName上) 三、android ListView几个比较特别的属性...四、如何获取ListView中单击某个item后的信息,onItemClick函数如下: public void onItemClick(AdapterView的值是一样的 注意: 在点击事件中,经常遇到的一个坑是:ListView不能响应onItemClick事件 发生原因:当listview中包含button,checkbox等控件的时候

    1.5K60

    Android经典面试题之RecycleView 深度解析与面试题梳理

    当数据集合发生变化时,Adapter 会接收到通知,并更新 RecyclerView 显示的内容。...ViewHolder 确保了视图的复用,每个 ViewHolder 对应一个视图,当数据项被滑动出屏幕时,ViewHolder 会被缓存,当新的数据项需要显示时,可以重用这些 ViewHolder。...批量处理(Batching):当数据集合发生变化时,RecyclerView 会将这些变化批量处理,减少布局的重新计算。...RecyclerView 与 ListView 的区别 ListView: 只能实现垂直列表。 不支持装饰器模式(如分割线)。 没有内建的动画支持。 滑动性能较差,因为每个列表项都是独立的视图。...RecyclerView 的数据更新 当数据集合发生变化时,应该调用 Adapter 的 notifyDataSetChanged、notifyItemInserted、notifyItemRemoved

    51310

    【Android从零单排系列二十】《Android视图控件——ListView》

    数据源:ListView通过与适配器(Adapter)配合使用来提供数据。适配器负责将数据与每个列表项进行绑定,以便正确渲染和展示。...android:listSelector:设置当列表项被选中时的背景效果,可以是颜色值或者drawable资源。...ArrayAdapter:ArrayAdapter是基于数组的简单适配器,用于将数据与ListView绑定。它适用于静态的、固定长度的数据集合,例如字符串数组或整数数组。...CursorAdapter:CursorAdapter适用于使用数据库查询结果作为数据源的情况。它将数据库查询的结果封装为Cursor对象,并将数据与ListView绑定。...SimpleAdapter:SimpleAdapter是一个通用的适配器,用于将复杂的数据结构(如List>)与ListView绑定。

    1.2K10

    Android回调接口的写法

    =null && cookie instanceof CursorAdapter){ CursorAdapter adapter = (CursorAdapter) cookie; // 给...cursorChangedListener; } private IOnCursorChangedListener cursorChangedListener; /** * 声明,cursor改变时的监听接口...{ // 让listview 显示最后一行 listView.setSelection(adapter.getCount()-1); } });   实例2: private...回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 如何定义一个回调 a....对象 2、在Fragment中的某个方法内,使用接口的实例,调用Activity的方法,向Activity通信 3、Activity实现接口与结构内的方法,实现处理回调的逻辑

    1.2K20

    观察者模式及在Android源码中的应用

    比如安卓的开源项目EventBus、Otto、AndroidEventBus等事件总线类的和RxJava响应式编程其核心都是使用观察者模式。...栗子 这里举一个追剧的例子,平常为了不错过最新的电视剧我们会订阅或关注这个电视剧,当电视剧更新后会第一时间推送给我们,下来就简单实现一下。...抽象观察者类 /** * 抽象观察者类,为所有具体观察者定义一个接口,在得到通知时更新自己 */ public interface Observer { /** * 有更新...当ListView的数据发生变化时,调用Adapter的notifyDataSetChanged函数,这个函数又会调用DataSetObservable的notifyChanged函数,这个函数会调用所有观察者...在AdapterDataSetObserver的onChanged函数中会获取Adapter中数据集的新数量,然后调用ListView的requestLayout()方法重新进行布局,更新用户界面。

    61110

    2014-10-25Android学习------布局处理(三)------常见且常用的列表布局

    (adapter); 显然我们需要知道,使用ListView控件的时候,activity对应的布局文件中必须只有一个ListView控件,它的id值时使用系统值 @id/android:list 这个...只有对应的activity(继承ListActivity)会自动的找到这个ListView控件 就这样我们便实现了ListView的功能,接下来就是选择它的模式了: 说白点,就是给这个ListView绑定值进行操作了...如何要对ListView进行数据绑定,必须使用到一个接口:Adapter。...其中最经常与ListView进行配合使用的有ArrayAdapter、 CursorAdapter及SimpleAdapter等。...嘿嘿,你说对了,这个属性确实有的 android:ellipsize //设置当文字过长时,该控件该如何显示。有如下值设置: ”start”—?

    1.2K30

    android的适配器作用,适配器在Android中的作用是什么?

    Adapter是一个接口,其实现提供数据并控制该数据的显示。TextView自己的适配器完全控制ListView的显示。因此适配器控制列表中显示的内容以及如何显示它。...SimpleCursorAdapter定义列表的各行的布局通过setAdapter()方法向CursorAdapter提供数据ListView。...您可能在每个应用程序中拥有的一个适配器是CursorAdapter,它使您能够从数据库查询中提供游标给出的内容。 ListView几乎总是某种适配器。...适配器提供对数据项的访问,并负责为数据集中的每个项创建视图。 适配器是将View与某种数据源连接的智能方法。 通常,您的视图是ListView,数据将以Cursor或Array的形式出现。...AdapterView的示例是ListView。 适配器还提供显示AdapterView中数据的子视图。适配器负责提供数据并创建表示每个项目的视图。

    2K40
    领券