当前位置: 移动技术网 > 移动技术>移动开发>Android > Android RecyclerView详解及简单实例

Android RecyclerView详解及简单实例

2019年07月24日  | 移动技术网移动技术  | 我要评论

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);
    }
  }
}

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网