Android RecyclerView 使用方法

说明:

    RecyclerView 使用好处:无感知刷新,局部刷新,性能提升。

    这里是纯净的RecyclerView,有一篇能添加头部的RecyclerView:Android RecyclerView添加Header头部

代码:

    0.添加引用

dependencies {   
    compile 'com.android.support:recyclerview-v7:24.2.1'  
}  

    1.Activity中

private RecyclerView rec_column;
private List<TwoLevelColumnBean> twoLevelColumnBeenList = new ArrayList<TwoLevelColumnBean>();
private SearchHomeColumnAdapter searchHomeColumnAdapter;

---
rec_column = (RecyclerView) findViewById(R.id.rec_column);
---

//LinearLayoutManager 线性布局
LinearLayoutManager layoutmanager = new LinearLayoutManager(getActivity());
layoutmanager.setOrientation(LinearLayoutManager.HORIZONTAL);//列表横向显示
//SearchHomeColumnAdapter Adapter适配器
searchHomeColumnAdapter = new SearchHomeColumnAdapter(twoLevelColumnBeenList) {
	@Override
	public void setColumn(String column) {
		category = column;
		refreshLayout.autoRefresh();
		searchHomeColumnAdapter.notifyDataSetChanged();
	}
};
rec_column.setLayoutManager(layoutmanager);
rec_column.setAdapter(searchHomeColumnAdapter);

    GridView设置:

        只用把LinearLayoutManager变成GridLayoutManager即可

GridLayoutManager layoutmanager= new GridLayoutManager(context, 4);//4表示4列

    2、布局文件xml

<android.support.v7.widget.RecyclerView
	android:id="@+id/rec_column"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:layout_weight="1" />

    3、SearchHomeColumnAdapter Adapter适配器

package briefer.pet.adapter;


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

import java.util.List;

import briefer.pet.R;
import briefer.pet.bean.TwoLevelColumnBean;

/**
 * 发现-二级栏目
 * Created by zst on 2018/4/4.
 */

public abstract class SearchHomeColumnAdapter extends RecyclerView.Adapter<SearchHomeColumnAdapter.ViewHolder> {

    private List<TwoLevelColumnBean> list;
    private int selectId = 0;

    public SearchHomeColumnAdapter(List<TwoLevelColumnBean> list) {
        this.list = list;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_search_column, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        holder.tv_column.setText(list.get(position).getColumn());
        holder.tv_column.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                selectId = position;
                setColumn(list.get(position).getColumn());
            }
        });

        if (position == selectId) {
            holder.tv_column.setBackgroundResource(R.drawable.bg_status_check);
        } else {
            holder.tv_column.setBackgroundResource(R.drawable.bg_status_normal);
        }
    }

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

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView tv_column;

        public ViewHolder(View view) {
            super(view);
            tv_column = (TextView) view.findViewById(R.id.tv_column);
        }
    }

    public abstract void setColumn(String column);
}

    4、适配器布局文件xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/tv_column"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:background="@drawable/bg_status_normal"
        android:text="栏目名"
        android:textSize="12sp" />
</LinearLayout>

 扩展

    1、RecyclerView 数据刷新的几种方式

  • 刷新全部可见的item,notifyDataSetChanged()
  • 刷新指定item,notifyItemChanged(int)
  • 从指定位置开始刷新指定个item,notifyItemRangeChanged(int,int)
  • 插入、移动一个并自动刷新,notifyItemInserted(int)、notifyItemMoved(int)、notifyItemRemoved(int)
  • 局部刷新,notifyItemChanged(int, Object)

猜你喜欢

转载自blog.csdn.net/u012246458/article/details/79816817