全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android  RecyclerView详解及简单实例

Android  RecyclerView

小白今天第一次接触RecyclerView,前辈大神告诉我这是一个很神奇的控件,一看就是一整天。

RecyclerView中有规定好的方法去显示列表,图片甚至视频。还带有删除新建某一列表的方法。相对于ListView这个
RecyclerView控件就更加牛了。

明白的大神看一眼就懂,小白可以自己照源码敲一遍看看效果。这段程序是把A-Z按列排列下来:

package com.example.osserver.recycler;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.*;
import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends ActionBarActivity {

  private RecyclerView mRecyclerView;
  private List<String> mDatas;
  private HomeAdapter mAdapter;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initData();
    mRecyclerView = (RecyclerView)findViewById(R.id.id_recyclerview);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    mRecyclerView.setAdapter(mAdapter = new HomeAdapter());
    mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.HORIZONTAL_LIST));

  }

  private void initData() {
        mDatas = new ArrayList<String>();
        for (int i ='A';i<='Z';i++){
          mDatas.add(""+(char)i);
    }
  }
class HomeAdapter extends RecyclerView.Adapter<MyViewHolder>
{
  @Override
  public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    MyViewHolder holder = new MyViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item,parent,false));
    return holder;
  }

  @Override
  public void onBindViewHolder(MyViewHolder holder, int position) {
    holder.tv.setText(mDatas.get(position));

  }

  @Override
  public int getItemCount() {
    return mDatas.size();
  }
}

  class MyViewHolder extends RecyclerView.ViewHolder
  {
    TextView tv;
    public MyViewHolder(View view) {
      super(view);
      tv = (TextView)view.findViewById(R.id.id_num);
    }
  }

}

接下来就是列表的润色部分:

今天我也只是进行到了这一步,踩了好多坑。

package com.zhy.sample.demo_recyclerview;

/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * limitations under the License.
 */

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.support.v7.widget.RecyclerView.State;
import android.util.Log;
import android.view.View;


/**
 * This class is from the v7 samples of the Android SDK. It's not by me!
 * <p/>
 * See the license above for details.
 */
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) {
    Log.v("recyclerview - itemdecoration", "onDraw()");

    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 < childCount; i++) {
      final View child = parent.getChildAt(i);
      android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext());
      final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
          .getLayoutParams();
      final int top = child.getBottom() + params.bottomMargin;
      final int bottom = top + mDivider.getIntrinsicHeight();
      mDivider.setBounds(left, top, right, bottom);
      mDivider.draw(c);
    }
  }

  public void drawHorizontal(Canvas c, RecyclerView parent) {
    final int top = parent.getPaddingTop();
    final int bottom = parent.getHeight() - parent.getPaddingBottom();

    final int childCount = parent.getChildCount();
    for (int i = 0; i < childCount; i++) {
      final View child = parent.getChildAt(i);
      final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
          .getLayoutParams();
      final int left = child.getRight() + params.rightMargin;
      final int right = left + mDivider.getIntrinsicHeight();
      mDivider.setBounds(left, top, right, bottom);
      mDivider.draw(c);
    }
  }

  @Override
  public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
    if (mOrientation == VERTICAL_LIST) {
      outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
    } else {
      outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
    }
  }
}

不能添加图片,那就写这些好了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # RecyclerView  # RecyclerView实例详解  # RecyclerView详解  # Android RecyclerView的简单使用  # android RecyclerView侧滑菜单  # 滑动删除  # 长按拖拽  # 下拉刷新上拉加载  # Android RecyclerView自定义上拉和下拉刷新效果  # Android RecyclerView网格布局(支持多种分割线)详解(2)  # android给RecyclerView加上折叠的效果示例  # Android recyclerview实现拖拽排序和侧滑删除  # Android RecyclerView选择多个item的实现代码  # Android RecyclerView上拉加载和下拉刷新(基础版)  # Android RecyclerView点击事件  # Android RecyclerView滚动定位  # Android开发中RecyclerView模仿探探左右滑动布局功能  # Android基于RecyclerView实现高亮搜索列表  # Android 中RecyclerView通用适配器的实现  # 大神  # 我也  # 好了  # 告诉我  # 中有  # 这段  # 一遍  # 这是一个  # 希望能  # 谢谢大家  # 相对于  # 就写  # 第一次接触  # 这一步  # findViewById  # initData  # layout  # activity_main  # setAdapter  # setLayoutManager 


相关文章: 如何用低价快速搭建高质量网站?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  ui设计制作网站有哪些,手机UI设计网址吗?  长沙做网站要多少钱,长沙国安网络怎么样?  b2c电商网站制作流程,b2c水平综合的电商平台?  教学网站制作软件,学习*后期制作的网站有哪些?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  简历在线制作网站免费版,如何创建个人简历?  西安大型网站制作公司,西安招聘网站最好的是哪个?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  建站之星后台密码如何安全设置与找回?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  电脑免费海报制作网站推荐,招聘海报哪个网站多?  Swift中swift中的switch 语句  实例解析angularjs的filter过滤器  如何在阿里云虚拟服务器快速搭建网站?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  建站主机选哪种环境更利于SEO优化?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何选购建站域名与空间?自助平台全解析  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  c# 在ASP.NET Core中管理和取消后台任务  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  建站之星安装后界面空白如何解决?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  制作电商网页,电商供应链怎么做?  家庭服务器如何搭建个人网站?  如何用IIS7快速搭建并优化网站站点?  建站之星如何取消后台验证码生成?  如何快速搭建高效服务器建站系统?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  外贸公司网站制作哪家好,maersk船公司官网?  大连 网站制作,大连天途有线官网?  建站与域名管理如何高效结合?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  网站制作网站,深圳做网站哪家比较好?  如何彻底删除建站之星生成的Banner?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  装修招标网站设计制作流程,装修招标流程?  如何在阿里云部署织梦网站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何选择适配移动端的WAP自助建站平台?  微信h5制作网站有哪些,免费微信H5页面制作工具?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何在Windows服务器上快速搭建网站?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  如何通过老薛主机一键快速建站?  大同网页,大同瑞慈医院官网? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。