首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在ListView中重用视图时保持LinearLayout不在

在ListView中重用视图时保持LinearLayout不变,可以通过使用ViewHolder模式来实现。ViewHolder模式是一种优化ListView性能的常用方法,它可以避免频繁地调用findViewById方法,提高列表的滑动流畅性。

具体实现步骤如下:

  1. 创建一个自定义的适配器类,继承自BaseAdapter或ArrayAdapter。
  2. 在适配器的getView方法中,使用convertView参数来重用已有的视图。
  3. 在getView方法中,使用ViewHolder类来保存已找到的视图,避免重复查找。
  4. 在ViewHolder类中定义相应的成员变量,用于保存视图的引用。
  5. 在getView方法中,判断convertView是否为空,如果为空则通过LayoutInflater.inflate方法加载布局文件,并使用findViewById方法找到布局中的视图,并将其保存到ViewHolder中。
  6. 在getView方法中,设置视图的内容和样式。
  7. 在getView方法的最后,返回convertView作为重用的视图。

示例代码如下:

代码语言:java
复制
public class MyAdapter extends BaseAdapter {
    private List<String> mData;
    private LayoutInflater mInflater;

    public MyAdapter(Context context, List<String> data) {
        mData = data;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Object getItem(int position) {
        return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item, parent, false);
            holder = new ViewHolder();
            holder.textView = convertView.findViewById(R.id.text_view);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        String item = mData.get(position);
        holder.textView.setText(item);

        return convertView;
    }

    private static class ViewHolder {
        TextView textView;
    }
}

在上述示例代码中,我们使用了一个ViewHolder类来保存TextView的引用,避免重复查找。在getView方法中,如果convertView为空,则通过LayoutInflater加载布局文件,并使用findViewById方法找到TextView,并将其保存到ViewHolder中。如果convertView不为空,则直接从convertView的Tag中获取ViewHolder对象。

这样,每次滑动ListView时,都会重用已有的视图,并且保持LinearLayout不变。这种方式可以提高ListView的性能和滑动的流畅性。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ListView详细介绍与使用

前言介绍: 关于 ListView 我们大家都应该是非常的熟悉了, Android 开发是经常用到的,今天就再来回顾一下,ListView 的使用方法,和一些需要优化注意的地方,还有日常开发过程的一些小技巧和经验...假如当屏幕一次可以显示 x 个 item (不用是完整的),那么 ListView 会创建 x+1 个视图;当第1个 item 离开屏幕的时候,此时这个 item 的 View 就会被回收,再入屏的...形式的数据绑定到列表作为数据源,支持泛型操作 步骤: xml 文件布局上实现 ListView Activity 定义数据源(列表或者数组) 构造 ArrayAdapter 对象,设置适配器...extends Map 创建 SimpleAdapter 适配器 将 SimpleAdapter 适配器绑定到 ListView 完事 具体实现 xml 添加 ListView <LinearLayout...的长度逐一绘制 ListView 的每一行 获取数据,通过 getItem() getItemId() 来获取 Adapter 的数据 重点看一下 getView 实现方式一: 直接返回索引对应的数据的视图

1.4K20

ListView优化和列表首尾使用

某些GUI工具包,可以通过程序代码整体性地声明复合的View对象来避免这个问题。因为访问这个组件,无非就是调用getter方法或访问字段。...当然,Android也可以做到这一点,只不过代码会复杂繁琐一些。...持有者模式,Tag标签用来保存对象,而对象又用来保存要使用的子组件。将持有者添加到视图后,只要用到了行,就可以轻而易举的访问其子组件,而不必再调用findViewById()方法了。...三、列表头和列表尾的使用 实际使用ListView,经常会有这样的需求:当位于ListView最顶部的时候,显示一个搜索框可以搜索列表内容,或者显示下拉刷新;当位于ListView最底部的时候...给ListView添加HeadView和FootView,当ListView滑动至列表第一项使HeadView滑动出现,当ListView滑动至列表最后一项使FootView滑动出现。

1.5K80

Carson带你学Android:全面解析列表ListView与AdapterView

前言 ListViewAndroid开发十分常见 今天,我将为大家带来ListView与AdapterView全面解析,含其特点、工作原理等,希望你们会喜欢。...,ListView不会为每一个数据创建一个视图,而是采用了Recycler组件,用于回收 & 复用 View 当屏幕需显示x个Item,那么ListView会创建 x+1个视图;当第1个Item...离开屏幕,此Item的View被回收至缓存,入屏的Item的View会优先从该缓存获取 注: 只有Item完全离开屏幕后才可复用,这也是为什么ListView要创建比屏幕需显示视图多1个的原因...:缓冲 显示视图 即:第1个Item离开屏幕是有过程的,会有1个 第1个Item的下半部分 & 第8个Item上半部分同时屏幕显示的状态,此时仍无法使用缓存的View,只能继续用新创建的视图View...生成方式 生成列表视图ListView)的方式主要有两种: 直接用ListView进行创建 让Activity继承ListActivity 2. xml文件配置信息 <LinearLayout xmlns

1K10

android学习笔记----ListView和各种适配器简介

ArrayAdapter具有说明来告诉它自己如何创建列表项视图,并返回给ListView,当屏幕被占满后 ListView 将停止向ArrayAdapter 寻求更多的列表项,列表项视图仅在需要才创建...重复使用它们,ListView 将请求列表特定位置的视图,同时传入之前用过的视图。...比如,ListView 请求的是位置 6 处的项,并向 ArrayAdapter 传入可重复使用的以前视图,ArrayAdapter 可以通过回收过的视图里放入数据,使用回收的视图,然后再接着比如通过调用...并且知道如何将每项呈现为视图,与此同时 ListView 负责屏幕上显示这些视图,检测用户的触摸手势,并跟踪用户是否位于整个列表。  ...> 某一个activity,比如NumbersActivity.java .....

2.1K10

Android开发:ListView、AdapterView、RecyclerView全面解析

工作原理:当屏幕需要显示x个item,那么ListView只会创建x+1个视图,当第一个item离开屏幕,此item的view就会被拿来重用(用于显示下一个item(即第x+1个)的内容)。...工作原理实例 假如屏幕只能显示7个item,那么ListView只会创建(7+1)个item的视图。当第1个item离开屏幕,此item的view就会被拿来重用(用于显示第8个item的内容)。...生成方式 生成列表视图ListView)的方式主要有两种: - 直接用ListView进行创建 - 让Activity继承ListActivity 2. xml文件配置信息 <LinearLayout...工作原理 当屏幕需要显示x个item,那么ListView只会创建x+1个视图,当第一个item离开屏幕,此item的view就会被拿来重用(用于显示下一个item(即第x+1个)的内容)。...当第1个item离开屏幕,此item的view就会被拿来重用(用于显示第8个item的内容)。原理如下图显示 !

3.4K30

ListView使用技巧-更新

虽然Android5.X,RecyclerView很多地方组件取代了ListView,但是ListView的使用依然是分广泛。 本博文将对以下两方面的内容进行介绍 1....使用ViewHolder模式提高效率 ViewHolder模式充分利用了ListView视图缓存机制,避免了每次getView()重复的调用findViewById()....自定义的Adapter定义一个内部类ViewHolder,并将Item布局的控件作为成员变量 2. 接下来只要在getView()方法通过视图缓存机制来重用以缓存即可。...隐藏ListView的滚动条 3.隐藏ListView的滚动条 默认的ListView滚动右边会显示滚动条,指定当前滚定的位置。...true-不活动隐藏,活动显示 listView.setVerticalScrollBarEnabled(false); // 或者

92030

Android开发笔记(一百二十二)循环器视图RecyclerView

RecyclerView RecyclerView是Androidsupport-v7库中新推出控件,中文别名为循环器视图,它的功能非常强大,可分别实现ListView、GridView,以及瀑布流网格的显示效果...onCreateViewHolder : 创建整个布局的视图持有者。输入参数包括视图类型,可根据视图类型加载不同的布局,从而实现带头部的列表布局。...: 1、自带ViewHolder及其重用功能,无需开发者手工重用ViewHolder; 2、未自带列表项的点击和长按功能,需要开发者自己实现点击和长按事件的监听; 3、增加区分不同列表项的视图类型...方法,界面就会根据新布局刷新列表项,这个特性特别适合于手机竖屏/横屏之间的显示切换(如竖屏展示ListView,横屏展示GridView),也适合在不同屏幕分辨率如手机/平板之间的显示切换(如手机上展示...LinearLayoutManager 线性布局管理器LinearLayoutManager类似于LinearLayout,当它是垂直方向布局,则展示效果类似于ListView;当它是水平方向布局

2.4K20

ListView列表数据源——Adapter

Android 鼓励弱耦合和组件的重用,Android MVC的具体体现如下: 模型(model):是应用程序的主题部分,所有的业务逻辑都应在该层(对数据库的操作、对网络等的操作都应该在model里面处理...MVC模式其实控制器Activity主要是起到解耦作用,将View视图和Model模型分离,虽然Activity起到交互作用,但是一般Activity中有很多关于视图UI的显示代码,因此View视图和...常见的View(ListView、GridView)等地方都需要用到Adapter。...Android的适配器负责为列表组件提供数据源,也负责将单独的数据元素转换为显示列表组件的特定视图,如ListView的适配器关系如下图所示。 ?...ArrayAdapter,创建ArrayAdapter必须指定如下三个参数。

2K100

Android项目实战(二十):浅谈ListView悬浮头部展现效果

先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数,关注数这一部分)滑动到顶端的时候不消失,而是停留在整个界面头部。...我们先分析要解决的问题: 1、如何实现列表ListView顶部视图跟随ListView一起滑动 2、如何实现滑动过程需要停留在顶部的视图 解决: 第一个问题,实现ListView与顶部视图一起滑动,ListView...提供一个方法,addHeadView(View);  意思就是ListView顶部添加一个View。...那么这个View就能和ListView一起滚动。 第二个问题,怎么保证界面中间的某一部分视图滑动到顶部的时候停留在顶部呢?...View1刚划出顶部的时机就是: 当滑动 firstVisibleItem>=要悬浮的 item的position 让View2显示 ,否则隐藏。

1.4K50

Android仿QQ好友详情页下拉顶部图片缩放效果

今天已经是这个星期连续加班的第四天了,趁着现在后台处理逻辑问题,将前几天写的一个小例子整理下来。 效果图 ?...效果分析 1 向下滑动,头部的图片随着手指滑动不断变大 2 向上滑动,不断的向上移动图片,直到图片不可见 3 当顶部图片不可见,向上滑动,滑动ListView 实现思路 1 由于这个View...分上下两部分,垂直排列,可以通过继承LinearLayout实现::自定义一个DragImageView,该View继承LinearLayout public DragImageView(Context...mMinimumVelocity = ViewConfiguration.get(context) .getScaledMinimumFlingVelocity(); } 2 onMeasure设置内容视图的高度...),使图片的两个坐标(宽、高)都大于等于 相应的视图坐标(负的内边距),图像则位于视图的中央 imageView.setScaleType(ScaleType.CENTER_CROP); listView

56550

常用Android布局文件优化技巧总结

布局文件,可以定义各种视图元素,如 TextView、Button、ImageView 等。每个视图元素都可以设置一些属性,如宽度、高度、边距、背景颜色等。...这些属性可以用来控制视图元素布局的位置和大小。 布局文件的解析过程 当应用程序启动,Android 系统会将布局文件解析成一个视图层次结构,然后将其加载到内存。...逐行解析 XML 文件,创建相应的视图对象,并设置视图对象的属性。 将所有视图对象组织成一个视图层次结构。 解析布局文件,Android 系统会使用反射机制来动态地创建视图对象。...ViewStub 是一个轻量级的视图容器,可以需要动态地加载布局。...应用程序,列表布局是最常用的视图之一。传统的列表布局一般使用 ListView 或 GridView,但这些视图容器性能和灵活性方面存在一定的问题。

20320

揭开RecyclerView庐山真面目

大家还记得之前第38期~第50期都在学习列表控件吗,其中用了8期讲ListView的使用,相信都已经掌握好了吧。...谷歌Android L中新增了RecyclerView,是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式。...它被作为ListView和GridView控件的继承者,最新的support-V7版本中提供支持。...开发RecyclerView充分考虑了扩展性,因此用它可以创建想到的任何种类的的布局。但在使用上也稍微有些不便,比如使用步骤更加复杂,特别是一些控制点击、长压事件需要自己完成。...GridLayoutManager:在网格展示条目,相当于之前学习的GridView。 StaggeredGridLayoutManager: 错落的网格展示条目,比如常见的瀑布流。

1.8K80

Android仿QQ好友详情页下拉顶部图片缩放效果

效果分析 1 向下滑动,头部的图片随着手指滑动不断变大 2 向上滑动,不断的向上移动图片,直到图片不可见 3 当顶部图片不可见,向上滑动,滑动ListView 实现思路 1 由于这个View分上下两部分...,垂直排列,可以通过继承LinearLayout实现::自定义一个DragImageView,该View继承LinearLayout public DragImageView(Context context...mMinimumVelocity = ViewConfiguration.get(context) .getScaledMinimumFlingVelocity(); } 2 onMeasure设置内容视图的高度...getChildAt(0); // 随着手指滑动,图片不断放大(宽高都大于或者等于ImageView的大小),并居中显示: // 根据上边的分析,CENTER_CROP:可以使用均衡的缩放图像(保持图像原始比例...),使图片的两个坐标(宽、高)都大于等于 相应的视图坐标(负的内边距),图像则位于视图的中央 imageView.setScaleType(ScaleType.CENTER_CROP); listView

94810

Fragment基本使用

方式添加,由于内存紧张导致Fragment被系统杀掉并恢复(re-instantiate)能保留这些数据 可以Fragment的onAttach()通过getArguments()获得传进来的参数...= (ListView)rootView.findViewById(R.id.list);//获取自己视图里的控件引用,方法一 return rootView; } onCreateView...(),还没有创建视图,所以在这里如果使用getView()方法将返回空 另一种方法是onActivityCreated()获取,其回调在onCreate()执行后再执行 public void onActivityCreated...listView = (ListView) getView().findViewById(R.id.list);//获取自己视图里的控件引用,方法二 ArrayAdapter arrayAdapter...给接口变量赋值,Fragment与Activity关联,需要强转 public void onAttach(Activity activity) { super.onAttach(activity

1.9K30
领券