Android使用RecyclerView仿美团分类界面

news2024/11/17 6:19:34

RecyclerView目前来说对大家可能不陌生了。由于在公司的项目中,我们一直用的listview和gridview。某天产品设计仿照美团的分类界面设计了一个界面,我发现用gridview不能实现这样的效果,所以就想到了RecyclerView,确实是一个很好的控件。和大家分享一下。

效果图

简介

RecyclerView与ListView原理是类似的:都是仅仅维护少量的View并且可以展示大量的数据集。RecyclerView用以下两种方式简化了数据的展示和处理: * 使用LayoutManager来确定每一个item的排列方式。 * 为增加和删除项目提供默认的动画效果

用法须知

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

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

  • LinearLayoutManager
  • GridLayoutManager
  • StaggeredGridLayoutManager

代码

布局文件

activity_main.xml

代码语言:javascript

复制

<?xml version="1.0" encoding="utf-8"? 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/activity_main"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="#7e6c6c"
  tools:context="cn.bluemobi.dylan.recyclerviewdemo.MainActivity" 


  <android.support.v7.widget.RecyclerView
    android:id="@+id/rv"
    android:background="#FFFFFF"
    android:paddingLeft="8dp"
    android:paddingBottom="5dp"
    android:layout_width="match_parent"
    android:layout_height="200dp" / 
</RelativeLayout 

item.xml

代码语言:javascript

复制

<?xml version="1.0" encoding="utf-8"? 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:layout_width="70dp"
  android:layout_height="match_parent"
  android:orientation="vertical" 

  <ImageView
    android:id="@+id/iv"
    android:layout_width="60dp"
    android:layout_height="75dp"
    app:srcCompat="@mipmap/ic_category_0" / 

  <TextView
    android:id="@+id/tv"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_gravity="center"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:text="TextView" / 

</LinearLayout 

Activity中的代码

RvAdpter.java

代码语言:javascript

复制

package cn.bluemobi.dylan.recyclerviewdemo;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 * Created by yuandl on 2016-11-01.
 */

public class RvAdpter extends RecyclerView.Adapter<RvAdpter.MyViewHolder  {
  private Context context;
  private List<Integer  datas;

  public RvAdpter(Context context, List<Integer  datas) {
    this.context = context;
    this.datas = datas;
  }

  @Override
  public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View contentView= LayoutInflater.from(context).inflate(R.layout.item,parent,false);
    MyViewHolder viewHolder=new MyViewHolder(contentView);
    return viewHolder;
  }

  @Override
  public void onBindViewHolder(MyViewHolder holder, int position) {
    holder.imageView.setImageResource(datas.get(position));
    holder.tv.setText("分类"+position);
  }

  @Override
  public int getItemCount() {
    return datas==null?0:datas.size();
  }

  public class MyViewHolder extends RecyclerView.ViewHolder {
    private ImageView imageView;
    public TextView tv;

    public MyViewHolder(View itemView) {
      super(itemView);
      imageView = (ImageView) itemView.findViewById(R.id.iv);
      tv = (TextView) itemView.findViewById(R.id.tv);
    }
  }
}

MainActivity.java

代码语言:javascript

复制

package cn.bluemobi.dylan.recyclerviewdemo;

import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
  private RecyclerView rv;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rv = (RecyclerView) findViewById(R.id.rv);
    initData();
  }

  /**
   * 初始化数据
   */

  private void initData() {
    List<Integer  datas = new ArrayList< ();
    for (int i = 0; i < 38; i++) {
      Resources res = getResources();
      datas.add(res.getIdentifier("ic_category_" + i, "mipmap", getPackageName()));
    }
    /**
     *用来确定每一个item如何进行排列摆放
     * LinearLayoutManager 相当于ListView的效果
     GridLayoutManager相当于GridView的效果
     StaggeredGridLayoutManager 瀑布流
     */
    rv.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL));
    rv.addItemDecoration(new RecyclerView.ItemDecoration() {
      @Override
      public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

        outRect.left = 10;
        outRect.top = 10;
        outRect.top = 10;
      }
    });
    rv.setAdapter(new RvAdpter(this, datas));
  }
}

园林绿化苗木_好苗木,好美景_美景园林好苗木,好花卉,好园林,好美景!本站详尽网罗绿化苗木和绿化花卉信息和知识,包含行道树、藤本植物、宿根草本植物、松柏长青、水生植物、绿化小苗、花灌木、花卉种子等类型苗木,更多关于园林方面的问答,多年从业人员专业解答,确保内容数据准确!还有园林景观设计灵感、园艺教程、苗木花卉等植物的栽培方法和养护技巧!领略园林艺术的魅力,让园林自然之美触手可及!icon-default.png?t=O83Ahttps://www.theluxfarm.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2175869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对话总结:Scale AI的创始人兼CEO Alex Wang

AI的三大支柱 计算:主要由大公司如NVIDIA推动。算法:顶尖实验室如OpenAI主导。数据:Scale致力于推动数据进展。前沿数据的重要性 与人类智能相比较,前沿数据是AI发展的关键。互联网数据是机器与人类合作的结果。语言模型的发展 第一阶段:原始的Transformer论文和GPT的小规…

PHP爬虫淘宝商品SKU详细信息获取指南

在电子商务领域&#xff0c;获取商品的SKU&#xff08;Stock Keeping Unit&#xff0c;库存单位&#xff09;详细信息对于商家进行库存管理、订单处理和客户服务至关重要。淘宝作为中国最大的电商平台之一&#xff0c;提供了丰富的API接口&#xff0c;使得开发者能够通过PHP爬虫…

AI在教育行业应用的启发和未来的方向

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 shelly已经给大家分享了很多AI的工具&#…

ThinkPHP一对多的关联模型运用

一、序言 最近在写ThinkPHP关联模型的时候一些用法总忘&#xff0c;我就想通过写博客的方式复习和整理下一些用法。 具体版本&#xff1a; topthink/framework&#xff1a;6.1.4topthink/think-orm&#xff1a;2.0.61 二、实例应用 1、一对多的关联 本文案例&#xff1a;一个用…

MySQL - 单表查询

DQL (数据查询语言)是用来查询数据库表中的记录的操作。在实际的业务系统中&#xff0c;查询操作的频率远远高于增删改。常见的查询操作包括条件查询、排序、分组等。 1. DQL 语法 SELECT 字段列表 FROM 表名列表 [WHERE 条件列表] [GROUP BY 分组字段] [HAVING 分组后条件]…

玩转图像处理:Python与OpenCV实现高效绿幕背景替换

文章目录 前言色度抠图技术&#xff08;Chroma Keying&#xff09;基本原理 数据准备代码实现性能分析代码优化优化后的速度 前言 现阶段绿幕抠图有很多种方式&#xff0c;比如色度抠图&#xff08;Chroma Keying&#xff09;、亮度抠图&#xff08;Luma Keying&#xff09;、色…

探索Python网络世界的利器:Requests-HTML库

文章目录 探索Python网络世界的利器&#xff1a;Requests-HTML库背景&#xff1a;为何选择Requests-HTML&#xff1f;什么是Requests-HTML&#xff1f;如何安装Requests-HTML&#xff1f;5个简单库函数的使用方法3个场景下库的使用示例常见Bug及解决方案总结 探索Python网络世界…

Acwing 质数

1.试除法判定质数 首先回顾一下什么是质数&#xff1f; 对所有大于1的自然数&#xff0c;如果这个数的约数只包含1和它本身&#xff0c;则这个数被称为质数或者素数 试除法&#xff1a;对于一个数n&#xff0c;从2枚举到n-1&#xff0c;若有数能够整除n&#xff0c;则说明除…

C# 泛型使用案例_C# 泛型使用整理

一、系统自带常用的泛型 1.字典&#xff0c;集合 //字典 Dictionary<string, int> dic new Dictionary<string, int>(); //泛型集合 List<int> list new List<int>(); 2.泛型委托&#xff0c;输入参数&#xff0c;输出参数 //泛型 委托---输出参…

nuclei配合burpsuite快速生成POC

nuclei配合burpsuite快速生成POC 简介 Nuclei是一款基于YAML语法模板的开发的定制化快速漏洞扫描器。它使用Go语言开发&#xff0c;具有很强的可配置性、可扩展性和易用性 官网&#xff1a;https://nuclei.projectdiscovery.io Nuclei项目地址&#xff1a;https://github.com/…

生物信息常用编辑器:轻量/强大/可定制/跨平台支持的编辑器之神 - vim

Emacs 被誉为神的编辑器&#xff0c;而 vim 是编辑器之神。本人曾经是 Emacs 的粉丝&#xff0c;不过后来不知不觉&#xff0c;已经是 vim 的重度用户&#xff0c;而 Emacs 却很长时间没用了。 如果你开始在生物信息学中编写代码或处理大量文本数据&#xff0c;选择一个合适的文…

【C语言刷力扣】2079.给植物浇水

题目&#xff1a; 解题思路&#xff1a; 面对每一株植物有两种情况 水够 or 水不够&#xff1a; 水够&#xff1a; result 加1即向前走一步水不够&#xff1a; 走回河边再走回来并向前走一步&#xff0c;走到下一植物 result 2 * i 1 int wateringPlants(int* plants, int…

Cluster Explanation via Polyhedral Descriptions

通过多面体描述进行聚类解释 本文关注聚类描述问题&#xff0c;即在给定数据集及其聚类划分的情况下&#xff0c;解释这些聚类的任务。我们提出了一种新的聚类解释方法&#xff0c;通过在每个聚类周围构建一个多面体&#xff0c;同时最小化最终多面体的复杂性或用于描述的特征…

2024-9-28 QT登录框基础练习

1.头文件 #ifndef LOGINWINDOW_H #define LOGINWINDOW_H#include <QWidget> #include <QPushButton> #include <QLineEdit> #include <QVBoxLayout>class LoginWindow : public QWidget {Q_OBJECTpublic:// 构造函数LoginWindow(QWidget *parent nul…

卸载WSL(Ubuntu),卸载linux

禁用 WSL 功能 打开 Windows 功能&#xff1a; 按下 Windows R 打开运行对话框&#xff0c;输入 optionalfeatures&#xff0c;然后按回车。 禁用 WSL&#xff1a; 在弹出的 Windows 功能窗口中&#xff0c;找到 适用于 Linux 的 Windows 子系统&#xff08;Windows Subsystem…

2024年咸宁中级职称水平测试合格公示

工程系列水测合格549人 农业系列水测合格18人 新闻系列水测合格37人 档案系列水测合格16人 看来每年评工程类职称 人员还是占大多数 关于咸宁初级、中级职称评审更多需要了解的可以留言

.NET 开源的功能强大的人脸识别 API

给大家推荐一款.NET 开源提供了强大的人脸识别 API&#xff0c;工具不仅易于集成&#xff0c;还具备高效处理能力。 本文将介绍一款如何利用这些API&#xff0c;为我们的项目添加智能识别的亮点 GitHub 上拥有 1.2k 星标的 C# 面部识别 API 项目&#xff1a;FaceRecognitionD…

传知代码-基于图神经网络的知识追踪方法(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 1.论文概述 论文链接提出了一种基于图神经网络的知识追踪方法&#xff0c;称为基于图的知识追踪&#xff08;GKT&#xff09;。将知识结构构建为图&#xff0c;其中节点对应于概念&#xff0c;边对应于它们之间的…