RecyclerView的基本使用
什么是RecyclerView
recycleview是support-v7包中的新组件,是一个强大的滑动组件,从它的名字recyclerview可以看出它具有回收复用的功能。
为什么要使用RecyclerView (为什么使用RecyclerView)?
①RecylerView封装了viewholder的回收复用,也就是说RecylerView标准化了ViewHolder,编写Adapter面向的是 ViewHolder而不再是View了,复用的 逻辑被封装了,写起来更加简单。
②提供了一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecylerView专门抽取出了相应的类,来控制Item的显示,使其的扩展性非常强。例如recyclerview不局限与下拉列表,它还支持GridView效果和瀑布流效果
③可以控制Item增删的动画,可以通过ItemAnimator这个类进行控制,当然针对增删的动画,RecylerView有其自己默认的实现。
④能实现ListView、GridView、staggeredgridview 布局
如何使用RecyclerView?(我使用的是网络请求图片 本文参考了 http://blog.csdn.net/lmj623565791/article/details/45059587; 出自:【张鸿洋的博客】 )
RecyclerView基本使用代码(设置布局 、adapter、item动画、分割线)
mRecyclerView = findView(R.id.id_recyclerview);
//设置布局管理器
mRecyclerView.setLayoutManager(layout);
//设置adapter
mRecyclerView.setAdapter(adapter)
//设置Item增加、移除动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//添加分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); // 设置默认分割线
具体步骤
先看效果图
①导入依赖(在model的build.radle 中 dependencies 导入)
//recyclerView的依赖
compile 'com.android.support:mediarouter-v7:25.0.0'
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
//BufferKnife的依赖
compile 'com.jakewharton:butterknife:7.0.1'
//okhttp的依赖
compile 'com.squareup.okio:okio:1.5.0'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
//gson的依赖
compile 'com.google.code.gson:gson:2.8.2'
compile files('libs/universal-image-loader-1.9.3.jar')
② 在MainActivity写入一下代码
package com.dabin.www.recycleview01;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.widget.Toast;
import java.io.IOException;
import java.util.List;
import adpter.HomeAdapter;
import bean.NewBase;
import custom.DividerItemDecoration;
import okhttp3.Call;
import utils.GsonObjectCallback;
import utils.NetWorkUtils;
import utils.OkHttp3Utils;
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
HomeAdapter homeAdapter;
List<NewBase.DataBean> data;
private String path = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//判断网络状态
boolean netWorkAvailable = NetWorkUtils.isNetWorkAvailable(this);
if (!netWorkAvailable) {
Toast.makeText(MainActivity.this, "联网:" + netWorkAvailable, Toast.LENGTH_SHORT).show();
}
//okhttp请求数据
OkHttp3Utils.getInstance().doGet(path, new GsonObjectCallback<NewBase>() {
@Override
public void onUi(NewBase newBase) {
data = newBase.getData();
homeAdapter = new HomeAdapter(MainActivity.this, data); //适配器 一定要写在刚得到数据之后
mRecyclerView.setAdapter(homeAdapter); // 设置适配器
//设置点击事件 (接口回调)
homeAdapter.setOnItemClickLitener(new HomeAdapter.OnItemClickLitener() {
@Override
//点击吐司
public void onItemClick(View view, int position) {
Toast.makeText(MainActivity.this, position + " click",
Toast.LENGTH_SHORT).show();
}
//长按吐司删除
@Override
public void onItemLongClick(View view, int position) {
Toast.makeText(MainActivity.this, position + " long click",
Toast.LENGTH_SHORT).show();
homeAdapter.removeData(position);
}
});
}
@Override
public void onFailed(Call call, IOException e) {
}
});
mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.HORIZONTAL));//设置StaggeredGridLayoutManager横向布局管理器(修改item布局就可以控制大小)
//mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); // 设置默认分割线
//mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL_LIST)); //自定义横向分割线
// 设置item动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
}
//添加
public void add(View v) {
homeAdapter.addData(1);
}
//删除
public void delete(View v) {
homeAdapter.removeData(1);
}
//线性布局
public void Linears(View v) {
mRecyclerView.se