zoukankan      html  css  js  c++  java
  • RecyclerView(一)

      Android系统在5.0版本推出了新控件——RecyclerView。RecyclerView几乎要将我们过去使用的ListView取代掉。因为我们不再需要自己管理一个带有static关键字的ViewHolder,不再需要控制Item的回收,同时,它也为我们提供了Item的添加和减除的动画接口。最后,最重要的是,它为ListView这样的,多项重复布局,提供了更好的解耦。将ListView这样的列表,拆解成了一个没有布局规则的可回收布局,和一个布局管理器。

      本系列将记录我学习使用RecyclerView的过程,希望通过这一次的学习,我能够用它完全地替代掉RecyclerView。

      首先看基本使用:

       RecyclerView的基本使用由4部分构成,分别是RecyclerView、Adapter、ViewHolder和LayoutManager。

      其中,Adapter负责ViewHolder、数据和RecyclerView三者的连接,而LayoutManager则管理了多个ViewHolder之间的关系。

      这里我写了一个简单的例子:

      ViewHolder:

    import android.support.v7.widget.RecyclerView;
    import android.view.View;
    import android.widget.TextView;
    
    /**
     * Created by fishboneLsy on 2016/6/25.
     */
    public class ItemViewHolder<T extends BaseBean> extends RecyclerView.ViewHolder {
    
        TextView textView;
    
        public ItemViewHolder(View itemView) {
            super(itemView);
            textView = (TextView) itemView.findViewById(R.id.item_textview_id);
        }
    
        public void bindViewHolder(T bean , int position){
            if (bean instanceof DataBean){
                textView.setText(((DataBean) bean).getName());
            }
        }
    }

      我们在ViewHolder的构造方法中,获取Item子控件的实例。然后,自己编写一个public方法,用于连接数据和ViewHolder。

      Adapter:

    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    import java.util.List;
    
    /**
     * Created by fishboneLsy on 2016/6/25.
     */
    public class RecyclerViewAdapter extends RecyclerView.Adapter<ItemViewHolder> {
    
        Context mContext;
        List<BaseBean> mDataList;
    
        public RecyclerViewAdapter(Context context , List<BaseBean> dataList){
            mContext = context;
            mDataList = dataList;
        }
    
        @Override
        public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item_layout , parent , false);
            return new ItemViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(ItemViewHolder holder, int position) {
            holder.bindViewHolder(mDataList.get(position) ,  position);
        }
    
        @Override
        public int getItemCount() {
            if (mDataList != null){
                return mDataList.size();
            }
            return 0;
        }
    }

      Adapter中三个方法,分别是:

      获取ViewHolder实例,通常一个item在一个列表中只会调用一次;

      连接ViewHolder和数据,当item被回收又重新需要显示时,此方法会调用一次;

      获取RecyclerView管理的item个数,在setAdapter和adapter.notifyDataSetChanged时调用。

      最后来看一下RecyclerView的设置:

      

    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.StaggeredGridLayoutManager;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
    
        RecyclerView recyclerView;
        RecyclerViewAdapter adapter;
    
        List<BaseBean> dataList;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            dataList = new ArrayList<>();
    
            recyclerView = (RecyclerView) findViewById(R.id.recycler_view_id);
    
            adapter = new RecyclerViewAdapter(this , dataList);
            recyclerView.setAdapter(adapter);
    
            RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
            recyclerView.setLayoutManager(layoutManager);
    
    
            initTest();
            adapter.notifyDataSetChanged();
    
        }
    
        private void initTest(){
            for (int i = 0 ; i < 30 ; i++){
                dataList.add(new DataBean("position = " + i));
            }
        }
    }

      

      这样,一个基本的类ListView列表就诞生了。目前来说,它的主要优势只有两个,一个是更好看的回收机制,另一个是自由的布局方式。

      缺点就一大堆了:没有HeaderView和FooterView、没有FastScroller等等。接下来,我们将逐步发现它更多的优点,并弥补它的缺陷。

      

      Done~

  • 相关阅读:
    微信小程序实战,与后台交互
    微信小程序开发笔记
    微信小程序 之页面跳转
    小程序(四):模板
    (1)Appium基础操作API
    ADB命令
    移动端测试知识概览
    计算机网络常见面试题
    pip命令
    随笔-记录一些简单内容
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/5616538.html
Copyright © 2011-2022 走看看