热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

AndroidRecyclerView加载不同布局简单实现

这篇文章主要为大家详细介绍了AndroidRecyclerView加载不同布局简单实现,感兴趣的小伙伴们可以参考一下

前言

关于RecyclerView的使用这里就不在赘述了,相信网上一搜一大把(本人之前的文章也有简单的使用介绍),这次我们讲的是RecyclerView在使用的过程中,有时候会根据不同的位置加载不同的布局的简单实现,这里只是起到抛砖引玉的作用

效果图

设计思想
 •重写RecyclerView.Adapter的getItemViewType(int position),
在此方法中根据不同的position,设置不同的ViewType
 •编写具体的RecyclerView.ViewHolder子类(不同子类对应不同View或Layout)
 •重写RecyclerView.Adapter的onCreateViewHolder(ViewGroup parent,int viewType)
在此方法中根据我们之前设置的ViewType来返回不同的RecyclerView.ViewHolder的子类 

代码

使用RecyclerView需要添加依赖

compile 'com.android.support:recyclerview-v7:24.1.1'

首先是MainActivity布局,很简单的布局

<&#63;xml version="1.0" encoding="utf-8"&#63;>


  


然后是MainActivity代码

package com.example.hfs.recyclerviewloadlayout;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

  private RecyclerView mRecyclerView;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initView();

    initData();
  }

  private void initData() {
    List descs = new ArrayList<>();
    descs.clear();

    List images = new ArrayList<>();
    images.clear();

    for (int i = 1; i <21; i++) {
      descs.add("测试数据" + (i <10 &#63; "0" + i : i));
    }

    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);
    images.add(R.mipmap.ic_launcher);

    MyAdapter adapter = new MyAdapter(MainActivity.this, descs, images);
    mRecyclerView.setAdapter(adapter);
    RecyclerView.LayoutManager manager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false);
    mRecyclerView.setLayoutManager(manager);
    mRecyclerView.addItemDecoration(new DividerItemDecoration(MainActivity.this, DividerItemDecoration.VERTICAL_LIST));

    adapter.setmOnItemClickListener(new MyAdapter.OnItemClickListener() {
      @Override
      public void onItemClick(View view, int position) {
        Toast.makeText(MainActivity.this, "点击了" + position + "位置", Toast.LENGTH_SHORT).show();
      }
    });
  }

  private void initView() {
    mRecyclerView= (RecyclerView) findViewById(R.id.recyclerview);
  }
}

然后是我们的适配器

package com.example.hfs.recyclerviewloadlayout;

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

import java.util.ArrayList;
import java.util.List;

/**
 * Created by HFS on 2016/8/24.
 */
public class MyAdapter extends RecyclerView.Adapter {

  private Context mContext;
  private List descs;
  private List images;
  private List allList;

  private static final int TEXTVIEW_VIEWTYPE = 1;
  private static final int IMAGEVIEW_VIEWTYPE = 2;

  public interface OnItemClickListener {
    void onItemClick(View view, int position);
  }

  private OnItemClickListener mOnItemClickListener;

  public OnItemClickListener getmOnItemClickListener() {
    return mOnItemClickListener;
  }

  public void setmOnItemClickListener(OnItemClickListener mOnItemClickListener) {
    this.mOnItemClickListener= mOnItemClickListener;
  }

  public MyAdapter(Context mContext, List descs, List images) {
    this.mCOntext= mContext;
    this.descs = descs;
    this.images = images;

    allList = new ArrayList<>();
    allList.clear();
    for (int i = 0; i 

接着就是我们自定义的DividerItemDecoration

package com.example.hfs.recyclerviewloadlayout;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

/**
 * Created by HFS on 2016/8/24.
 */
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
  private static final int[] ATTRS = new int[]{
      android.R.attr.listDivider
  };

  public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;

  public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;

  private Drawable mDivider;

  private int mOrientation;

  public DividerItemDecoration(Context context, int orientation) {
    final TypedArray a = context.obtainStyledAttributes(ATTRS);
    mDivider = a.getDrawable(0);
    a.recycle();
    setOrientation(orientation);
  }

  public void setOrientation(int orientation) {
    if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {
      throw new IllegalArgumentException("invalid orientation");
    }
    mOrientation = orientation;
  }

  @Override
  public void onDraw(Canvas c, RecyclerView parent) {


    if (mOrientation == VERTICAL_LIST) {
      drawVertical(c, parent);
    } else {
      drawHorizontal(c, parent);
    }

  }


  public void drawVertical(Canvas c, RecyclerView parent) {
    final int left = parent.getPaddingLeft();
    final int right = parent.getWidth() - parent.getPaddingRight();

    final int childCount = parent.getChildCount();
    for (int i = 0; i 

项目地址:https://github.com/Greathfs/RecyclerViewLoadLayout

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文详细介绍了如何在本地环境中安装配置Frida及其服务器组件,以及如何通过Frida进行基本的应用程序动态分析,包括获取应用版本和加载的类信息。 ... [详细]
  • BeautifulSoup4 是一个功能强大的HTML和XML解析库,它能够帮助开发者轻松地从网页中提取信息。本文将介绍BeautifulSoup4的基本功能、安装方法、与其他解析工具的对比以及简单的使用示例。 ... [详细]
  • Python中调用Java代码的方法与实践
    本文探讨了如何在Python环境中集成并调用Java代码,通过具体的步骤和示例展示了这一过程的技术细节。适合对跨语言编程感兴趣的开发者阅读。 ... [详细]
  • 解决Win7中BAT文件无法设置管理员权限的问题
    本文介绍了一种通过创建快捷方式并使用其高级属性中的“以管理员身份运行”选项来解决Windows 7系统下BAT文件无法直接设置为管理员权限的方法。 ... [详细]
  • Spring Boot 初学者指南(第一部分)
    本文介绍了Spring Boot框架的基础知识,包括其设计理念、主要优势以及如何简化传统的J2EE开发流程。 ... [详细]
  • 酷家乐 Serverless FaaS 产品实践探索
    本文探讨了酷家乐在 Serverless FaaS 领域的实践与经验,重点介绍了 FaaS 平台的构建、业务收益及未来发展方向。 ... [详细]
  • 深入理解AutoMapper:.NET中的高效对象映射工具
    AutoMapper 是一个用于 .NET 平台的对象映射库,它能够简化不同对象模型之间的数据转换过程。本文将详细介绍 AutoMapper 的基本功能、应用场景及配置方法。 ... [详细]
  • 配置PicGo与Gitee结合Typora打造高效写作环境
    本文详细介绍了如何通过PicGo和Gitee搭建个人图床,并结合Typora实现高效的文章撰写。包括创建图床项目、生成访问令牌、安装配置PicGo和Typora等步骤。 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 在Android应用开发中,当在MenuItem中通过app:actionLayout属性使用Switch控件时,可能会遇到空指针异常的问题。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 详解MyBatis二级缓存的启用与配置
    本文深入探讨了MyBatis二级缓存的启用方法及其配置细节,通过具体的代码实例进行说明,有助于开发者更好地理解和应用这一特性,提升应用程序的性能。 ... [详细]
  • 利用Python在DragonBoard 410c上解析GPS数据获取位置信息
    本文介绍了如何在DragonBoard 410c开发板上使用Python脚本来解析GPS报文,从而获取精确的位置信息。DragonBoard 410c集成了GPS、Wi-Fi和高性能GPU,非常适合用于各种物联网项目。 ... [详细]
  • 本文介绍如何在Caffe框架中运行ResNet模型,包括通过Caffe内置工具创建LMDB数据集的方法,以及相关参数的详细说明。 ... [详细]
  • 华为云openEuler环境下的Web应用部署实践
    本文详细记录了在华为云openEuler系统上进行Web应用部署的具体步骤,包括配置yum源、安装Apache、MariaDB、PHP及其相关组件,并完成WordPress的安装与配置过程。 ... [详细]
  • IIS6批量添加主机头,修改IIS数据库
    首先,找到IIS的数据库。默认是在C:\WINDOWS\system32\inetsrv下的MetaBase.xml文件。如果找不到,请右键右键站点-》所有服务-》将配置保存到一个 ... [详细]
author-avatar
chajian005_844
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有