RecyclerView初步试用(一)

RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好。接下来通过一系列的文章讲解如何使用RecyclerView,彻底抛弃ListView.

现在网络上关于RecyclerView的知识点介绍也很多,我也不在这里献丑,就拿过来和大家一起分享一下

本文出自 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1118/2004.html

介绍

RecyclerView与ListView原理是类似的:都是仅仅维护少量的View并且可以展示大量的数据集。RecyclerView用以下两种方式简化了数据的展示和处理:

  • 使用LayoutManager来确定每一个item的排列方式。

  • 为增加和删除项目提供默认的动画效果。

你也可以定义你自己的LayoutManager和添加删除动画,RecyclerView项目结构如下:

  • Adapter:使用RecyclerView之前,你需要一个继承自RecyclerView.Adapter的适配器,作用是将数据与每一个item的界面进行绑定。

  • LayoutManager:用来确定每一个item如何进行排列摆放,何时展示和隐藏。回收或重用一个View的时候,LayoutManager会向适配器请求新的数据来替换旧的数据,这种机制避免了创建过多的View和频繁的调用findViewById方法(与ListView原理类似)。

目前SDK中提供了三种自带的LayoutManager:

  • LinearLayoutManager

  • GridLayoutManager

  • StaggeredGridLayoutManager

第一节、简单的RecyclerView使用方法

本节所示示例是一个最简单的使用方法,在接下来几节中将会介绍更多RecyclerView的别的一些屌爆的用法。作者用的环境是Android Studio 0.8.6。

1、添加依赖

在AS的build.gradle中添加依赖,然后同步一下就可以引入依赖包:

dependencies {
...
compile 'com.android.support:recyclerview-v7:21.0.+'
}

代码

添加完依赖之后,就开始写代码了,与ListView用法类似,也是先在xml布局文件中创建一个RecyclerView的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"/>
</RelativeLayout>


创建完布局之后在MainActivity中获取这个RecyclerView,并声明LayoutManagerAdapter,代码如下:

mRecyclerView = (RecyclerView)findViewById(R.id.my_recycler_view);
//创建默认的线性LayoutManager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
//如果可以确定每个item的高度是固定的,设置这个选项可以提高性能
mRecyclerView.setHasFixedSize(true);
//创建并设置Adapter
mAdapter = newMyAdapter(getDummyDatas());
mRecyclerView.setAdapter(mAdapter);


接下来的问题就是Adapter的创建:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    public String[] datas = null;
    public MyAdapter(String[] datas) {
        this.datas = datas;
    }
    //创建新View,被LayoutManager所调用
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
        ViewHolder vh = new ViewHolder(view);
        return vh;
    }
    //将数据与界面进行绑定的操作
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        viewHolder.mTextView.setText(datas[position]);
    }
    //获取数据的数量
    @Override
    public int getItemCount() {
        return datas.length;
    }
    //自定义的ViewHolder,持有每个Item的的所有界面元素
    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;
        public ViewHolder(View view){
        super(view);
            mTextView = (TextView) view.findViewById(R.id.text);
        }
    }
}


3、运行

写完这些代码这个例子既可以跑起来了。从例子也可以看出来,RecyclerView的用法并不比ListView复杂,反而更灵活好用,它将数据、排列方式、数据的展示方式都分割开来,因此可定制型,自定义的形式也非常多,非常灵活。

横向布局

如果想要一个横向的List只要设置LinearLayoutManager如下就行,注意要声明mLayoutManager的类型是LinearLayoutManager而不是父类LayoutManager:

mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);


Grid布局

如果想要一个Grid布局的列表,只要声明LayoutManager为GridLayoutManager即可:

mLayoutManager = new GridLayoutManager(context,columNum);
mRecyclerView.setLayoutManager(mLayoutManager);


注意,在Grid布局中也可以设置列表的Orientation属性,来实现横向和纵向的Grid布局。

瀑布流布局

瀑布流就使用StaggeredGridLayoutManager吧,具体方法与上面类似,就不做介绍啦。

总结

本节介绍的是一个最最简单的RecyclerView的使用方法,后面将介绍一些更高级的用法。这一节就简单的介绍一下RecyclerView的用法,下一节进入RecyclerView的高级阶段!



标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
<think>好的,用户的问题是解决RecyclerView嵌套时只显示行的现象。我需要根据提供的引用资料来整理解决方案。首先,用户提到的引用中有几个常见的解决方法。比如引用2和3提到在RecyclerView外层套RelativeLayout并设置nestedScrollingEnabled为false。另外引用4提到在onCreateViewHolder中inflate布局时不要传入parent,这可能是因为子项布局参数的问题。还有引用5提到高度设置的问题,可能需要使用ConstraintLayout或调整布局高度。 首先,我要确定用户的问题具体是哪种嵌套情况。是ScrollView嵌套RecyclerView,还是RecyclerView内部再嵌套另RecyclerView?根据用户的问题,他说的是RecyclerView嵌套RecyclerView,所以可能需要同时处理布局和滚动冲突。 接下来,分析可能的原因。当RecyclerView嵌套时,子RecyclerView可能没有正确测量高度,导致只显示行。这可能是因为父容器没有正确分配空间,或者子RecyclerView的布局参数设置不当。 根据引用中的解决方案,我需要整理步骤: 1. 检查布局结构,确保子RecyclerView的外层有适当的布局容器,比如RelativeLayout或LinearLayout,并设置nestedScrollingEnabled为false,避免滚动冲突。 2. 调整子RecyclerView的高度设置,可能需要使用固定高度或match_parent,但这样可能不够灵活。另种方法是使用ConstraintLayout来约束子RecyclerView的顶部和底部,设置高度为0dp,让它填充可用空间。 3. 检查子RecyclerView的Adapter中的onCreateViewHolder方法,确保在inflate布局时没有错误地传递parent参数,导致布局参数不正确。比如引用4中的做法是不传递parent,或者正确使用三个参数的inflate方法。 4. 可能需要为父RecyclerView设置固定高度,或者使用NestedScrollView代替ScrollView,但如果是RecyclerView嵌套,可能还需要其他处理。 需要将这些步骤分点整理,确保用户能够逐步实施。同时,要注意代码示例的正确性,比如布局文件的修改和Java/Kotlin代码的调整。可能还需要提到其他注意事项,比如滑动性能的问题,因为关闭嵌套滚动可能会影响用户体验,但至少先解决显示问题。 最后,生成相关问题,帮助用户进步解决可能遇到的其他问题,比如性能优化或显示不全的问题。确保引用正确,比如引用2、3、4、5中的方法,并正确标注来源。</think>针对RecyclerView嵌套时只显示行的常见问题,以下是系统级解决方案: ### 、布局层级优化 1. **外层容器包裹** 在子RecyclerView外层添加`RelativeLayout`或`LinearLayout`容器,并禁用嵌套滚动: ```xml <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.recyclerview.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:nestedScrollingEnabled="false"/> </RelativeLayout> ``` 该方案通过强制子RecyclerView完整测量高度实现完整显示[^2][^3] 2. **约束布局高度** 使用`ConstraintLayout`时需明确约束边界: ```xml <androidx.constraintlayout.widget.ConstraintLayout> <RecyclerView android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout> ``` 高度设为0dp可使其根据约束条件动态计算高度[^5] ### 二、代码层修复 1. **ViewHolder创建修正** 在Adapter的`onCreateViewHolder`中避免错误传递parent参数: ```java View convertView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item, parent, false); // ✅正确方式 ``` 错误写法`inflate(R.layout.item, null)`会导致测量异常[^4] 2. **焦点控制** 在父容器添加: ```java recyclerView.setFocusable(false); ``` 防止焦点争夺导致的布局异常[^1] ### 三、滑动冲突处理 设置嵌套滚动属性: ```xml android:nestedScrollingEnabled="false" android:overScrollMode="never" ``` 该方案会牺牲滑动惯性但确保内容完整显示[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值