Android_RecyclerView的用法

自Android 5.0之后,谷歌公司推出了RecylerView控件,那么RecylerView是什么呢?他能做什么呢??

1.为什么叫做RecylerView??

1.不关心item是否显示在正确的位置上,以及如何显示的;LayoutManager来控制显示的风格。
2.不关心item之间是如何划分分割线的;ItemDecoration来控制。
3.不关心Item增加与删除的动画效果;由ItemAnimatior来显示。
4.仅仅关系新如何回收和复用View.

2.RecylerView中重要的类

Adapter:使用RecyclerView之前,需要一个继承自RecyclerView.Adapter的适配器,作用是将数据与每一个item的界面进行绑定.
ViewHolder:
LayoutManager:用来确定每一个item如何进行排列摆放,何时展示和隐藏。回收或重用一个View的时候,LayoutManager会向适配器请求新的数据来替换旧的数据,这种机制避免了创建过多的View和频繁的调用findViewById方法(与ListView原理类似)。
ItemDecoration:
ItemAnimatior:

3.RecylerView能干什么??

1.可以替代listview、gridView;
2.可以显示横向的ListView;
3.可以显示横向的GridView;
4.可以做成瀑布流的效果;
5.定制Item增加与删除动画;

4.RecylerView的初步用法

在AS的build.gradle中添加recyclerview的依赖:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.0'
    **compile files('libs/android-support-v7-recyclerview.jar'**)
}

使用RecylerView必须导入support-v7包.在xml布局文件中创建一个RecylerView的布局:

<android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

MainActivity中获取这个RecyclerView,并声明LayoutManager与Adapter,代码如下:

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


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        initData();
        //创建并设置Adapter
        mAdapter = new SimpleAdapter(this, mDatas);
        mRecyclerView.setAdapter(mAdapter);

        // 设置RecyclerView的布局管理LinearLayoutManager 
        LinearLayoutManager layoutManager = new LinearLayoutManager(this,
        LinearLayoutManager.VERTICAL,false);
        mRecyclerView.setLayoutManager(layoutManager);
    }

    private void initData() {
        mDatas = new ArrayList<>();
        for (int i = 'A'; i < 'z'; i++) {
            mDatas.add("" + (char) i);
        }
    }

    private void initView() {
        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
    }

接下来就是adapter的创建:

public class SimpleAdapter extends RecyclerView.Adapter<MyViewHolder> {

    private Context mContext;
    private List<String> mDatas;
    private LayoutInflater mInflater;

    public SimpleAdapter(Context context, List<String> datas) {

        this.mContext = context;
        this.mDatas = datas;
        mInflater = LayoutInflater.from(context);

    }
    /** 创建viewHolder */
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = mInflater.inflate(R.layout.item_simle_textview, viewGroup, false);
        MyViewHolder viewHolder = new MyViewHolder(view);
        return viewHolder;
    }

    /** 将数据和界面进行绑定 */
    @Override
    public void onBindViewHolder(MyViewHolder myViewHolder, int i) {
        // 对每一个viewholder进行赋值
        myViewHolder.mTextView.setText(mDatas.get(i));

    }


// 获取数据的数量
    @Override
    public int getItemCount() {
        return mDatas.size();
    }
}

// 自定义一个viewholder。RecyclerView的好处就在于现在相当于强制用户必须使用viewholder进行复用和回收。
class MyViewHolder extends RecyclerView.ViewHolder {

    TextView mTextView;
    public MyViewHolder(View itemView) {
        super(itemView);
        mTextView = (TextView) itemView.findViewById(R.id.text);

    }
}

5.注意:在此处可能会报一个”关于RecyclerView使用报错Didn’t find class “android.support.v7.recyclerview.R$styleabl ”的错误:

起因:

其实一直使用RecyclerView都好好的。是直接把RecyclerView放到V7工程的libs下,然后用自己的工程引用V7工程。但是由于要使用新版本的RecyclerView所以更新了一下V7包,就出现了上述的问题了。

分析:

其实报错很明显– 找不到资源文件(因为RecyclerView在22.0.x版本之后才加入资源文件,所以如果引用之前的版本比如21.0.0,是可以直接将jar包放到工程libs目录下的)。于是便打开RecyclerView目录(.\extras\android\support\v7\recyclerview)查看发现里面确实有资源文件。但是百度之后发现jar包中是不带有任何资源文件的。所以应该想办法让工程可以引用到这些资源文件。

解决方法:
进入sdk\extras\android\m2repository\com\android\support\recyclerview-v7\21.0.0目录,找到recyclerview-v7-21.0.0.aar这个文件。用解压软件解压此文件里面有classes.jar,把这个jar包放到项目中的libs文件下即可。这个jar包就是RecyclerView要使用的,可以给它改个名字例如android-support-v7-recyclerview.jar , 便于查看。

6.最终运行效果:

这里写图片描述

7.绘制分割线。要调用RecyclerView的addItemDecoration(ItemDecoration)方法,但是ItemDecoration没有实现类,只能组件通过继承ItemDecoration来实现。github有,直接引用就好了:

https://github.com/gabrielemariotti/RecyclerViewItemAnimators

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值