RecyclerView使用总结

遇到的异常

  java.lang.ExceptionInInitializerError静态块初始化异常

  NetworkOnMainThreadException访问网线不能在主线程中进行

我的参考资料

  http://www.oschina.net/question/1764894_246656?fromerr=ZElwOffs
  老师给的源代码

recyclerView 和cartView的导入方法

  别人的都是:
    compile ‘com.android.support:recyclerview-v7:23.4.0‘
    compile ‘com.android.support:cardview-v7:23.4.0‘

  但是我的自动添加是这样的:
    compile ‘com.android.support:recyclerview-v7:24.0.0 -beat‘
    compile ‘com.android.support:cardview-v7:24.0.0 -beat‘
    但是就算这样也是不成功的

  我的只能这样写:
    compile ‘com.android.support:recyclerview-v7:21.+‘
    compile ‘com.android.support:cardview-v7:21.+‘

 RecyclerView的使用

  1页面布局

1     <android.support.v7.widget.RecyclerView
2         android:id="@+id/rcView"
3         android:layout_width="match_parent"
4         android:layout_height="match_parent"
5         />

  2初始化控件

RecyclerView rcView;
 rcView = (RecyclerView) this.findViewById(R.id.rcView);

  3给它数据(图片、文字等等)

    List<Integer> imageUrls;
    Integer[] imgs ={
            R.drawable.happy1,R.drawable.happy2,R.drawable.happy3,R.drawable.happy4,
            R.drawable.happy5,R.drawable.happy6,R.drawable.happy7,R.drawable.happy8
    };
        imageUrls = new ArrayList<>();
        imageUrls.addAll(Arrays.asList(imgs));

  4适配器

public class MyApdater extends RecyclerView.Adapter<MyApdater.MyViewHolder> {

    private Context context;
    private LayoutInflater inflater;
    private List<Integer> imageList;
    private OnItemClickListener itemClickListener;
    public interface OnItemClickListener{
        void onItemClick(View view, int position);
    }

    public void setOnItemClickListener(OnItemClickListener itemClickListener){
        this.itemClickListener = itemClickListener;
    }

    public MyApdater(Context context, List<Integer> imageList) {
        this.context = context;
        this.imageList = imageList;
        inflater = LayoutInflater.from(context);
        setHasStableIds(true);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new MyViewHolder(inflater.inflate(R.layout.list_item,parent,false));
    }

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

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        int e = imageList.get(position);
        holder.img_item.setImageResource(e);
//        x.image().bind(holder.img_item,imageList.get(position),options);
        /*if(itemClickListener != null){
            holder.img_item.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

//                    int pos = holder.getPosition();  //获取当前Item的postion
                    itemClickListener.onItemClick(holder.img_item,position);
                }
            });
        }*/
    }

    class MyViewHolder extends RecyclerView.ViewHolder{
        private ImageView img_item;
        public MyViewHolder(View itemView) {
            super(itemView);
            img_item = (ImageView) itemView.findViewById(R.id.img_item);
        }
    }
}

  5素材xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_margin="10dp"
    android:orientation="horizontal"
    card_view:cardBackgroundColor="#EEEEEE"
    card_view:cardCornerRadius="5dp">

    <ImageView
        android:src="@drawable/happy1"
        android:id="@+id/img_item"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</android.support.v7.widget.CardView>

  6在MainActivity中使用适配器

    MyApdater myApdater;
        myApdater = new MyApdater(this,imageUrls);
        rcView.setAdapter(myApdater);

  7设置RecyclerView的动画、显示等效果

        StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.VERTICAL);
        rcView.setItemAnimator(new DefaultItemAnimator());
        //rcView.addItemDecoration();
        rcView.setLayoutManager(layoutManager);

 

附:MainActivity全代码

package com.firefly.recyclerview;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

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

public class MainActivity extends ActionBarActivity {
    RecyclerView rcView;
    MyApdater myApdater;
    List<Integer> imageUrls;
    Integer[] imgs ={
            R.drawable.happy1,R.drawable.happy2,R.drawable.happy3,R.drawable.happy4,
            R.drawable.happy5,R.drawable.happy6,R.drawable.happy7,R.drawable.happy8
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        init();
    }

    private void init() {

        rcView = (RecyclerView) this.findViewById(R.id.rcView);
        //GridLayoutManager layoutManager = new GridLayoutManager(this,2);
        //LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        //layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.VERTICAL);
        rcView.setItemAnimator(new DefaultItemAnimator());
        //rcView.addItemDecoration();
        rcView.setLayoutManager(layoutManager);
        myApdater = new MyApdater(this,imageUrls);
        rcView.setAdapter(myApdater);
     /*   myApdater.setOnItemClickListener(new MyApdater.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(MainActivity.this, position + " click", Toast.LENGTH_SHORT).show();
                imageUrls.remove(position);
                myApdater.notifyItemRemoved(position);
            }
        });*/

    }

    protected void initData()
    {
        imageUrls = new ArrayList<>();
        imageUrls.addAll(Arrays.asList(imgs));
    }

}
时间: 2024-07-28 21:42:27

RecyclerView使用总结的相关文章

Android零基础入门第64节:揭开RecyclerView庐山真面目

大家还记得之前在第38期~第50期都在学习列表控件吗,其中用了8期讲ListView的使用,相信都已经掌握好了吧.那么本期一起来学习Android 5.X新增的一个列表组件,那就是RecyclerView的使用. 一.RecyclerView概述 从前面的学习我们知道,ListView的功能非常强大,几乎绝大部分应用程序都会使用到,虽然也学会一些方法技巧来提升ListView的效率,但其性能还是不是很完美. 另外ListView的可扩展性相对来说比较弱,以前要实现每个列表项的高度不同的界面,或者

RecyclerView动态添加、删除及点击事件

上一节讲解了RecyclerView的三种显示方式,本节将主要研究一下RecyclerView的动态添加.删除及其单击和长按事件的处理.我们在上一节代码的基础上进行相关操作. 一.修改适配器类MyAdapter,加入添加和删除这两个方法: public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private Context context; private List<String>

安卓易学,爬坑不易——腾讯老司机的RecyclerView局部刷新爬坑之路

针对手游的性能优化,腾讯WeTest平台的Cube工具提供了基本所有相关指标的检测,为手游进行最高效和准确的测试服务,不断改善玩家的体验.目前功能还在免费开放中. 点击地址:http://wetest.qq.com/cube立即体验! 作者:Hoolly,腾讯移动客户端开发工程师. 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处 WeTest导读 安卓开发者都知道,RecyclerView比ListView要灵活的多,但不可否认的里面的坑也同样埋了不少人.下面让我们看看腾讯开发工程

RecyclerVIew 下拉刷新上拉加载

步骤: 寻找RecyclerView 上拉刷新下拉加载开源库 加入到项目中 解决整合进来的bug 待续...

【Android】RecyclerView详解(一)

1.介绍 RecyclerView是比 ListView 更高级且更具灵活性的组件. 此组件是一个用于显示庞大数据集的容器,可通过保持有限数量的视图进行非常有效的滚动操作. 如果您有数据集合,其中的元素将因用户操作或网络事件而发生改变,请使用 RecyclerView 小组件. RecyclerView使用起来很方便因为它: 提供了一种插拔式的体验,高度的解耦,异常的灵活使用; 显示的样式更丰富包括水平,竖直,Grid,瀑布显示方式; 可以通过ItemDecoration自定义Item间的间隔;

【FastDev4Android框架开发】实例解析之SwipeRefreshLayout+RecyclerView+CardView(三十五)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50087873 本文出自:[江清清的博客] (一).前言: 作为Android L开始,Google更新了新控件RecyclerView和CardView,这两个控件在之前的文章中已经做了详细介绍和使用,同时在前面还对下拉刷新组件SwipeRefreshLayout进行相关讲解.本来该专题不在更新了,正好昨天有一个群友问到了怎么样结合SwipeRefreshLayou

Android RecyclerView设置item间距

RecyclerView没有可以直接设置间距的属性,但可以用ItemDecoration来装饰一个item,所以继承重写ItemDecoration就可以实现间距了 public class SpaceItemDecoration extends RecyclerView.ItemDecoration{ private int space; public SpaceItemDecoration(int space) { this.space = space; } @Override public

《android recyclerview的简单使用》

首先是主要布局 <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swipeRefreshLayout" android:layout_width="match_parent" android:layout_height="match_pa

明日之星——RecyclerView(一)

在Listview中使用了很久的viewholder.setTag.getTag来实现Item复用后, Google大大终于看不下去了.推出了明日之星RecyclerView,现已加入support.v7豪华套餐.顾名思义,RecyclerView本身是不管怎么布局的.它本身只负责,加载看得见的viewHolder,释放看不见的viewHolder.这一功能就代替掉了,ListView中麻烦的Item复用设计.而对于布局的控制,RecyclerView则依赖于LayoutManager.下面,我

RecyclerView使用

RecyclerView是android5.0提供的新组件(最新的support.v7中也提供了该组件),类似于ListView,但是比ListView更灵活.更先进,我觉得主要表现在以下几个方面: 1.  把ViewHolder的实现封装起来,规范了ViewHolder,把item的view写入ViewHolder中,通过复用ViewHolder来实现view的复用. 2.  RecyclerView.Adapter中把view的回收和内容改变等操作分开解耦了,比传统的Adapter更为灵活.