RecycleView的简单应用

RecycleView是Android L版本中新添的一个用来取代ListView SDK的控件,RecycleView具有灵活性好,扩展性强等功能,一经推出就受到了很大的欢迎,下边是小编闲暇时写的一个简单的demo,供还没有习惯用recycleView来开发的兄台参考:

1、先看一下主界面布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.wls.recycletext.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/btn_add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="btnClick"
        android:text="添加数据"/>
    <Button
        android:id="@+id/btn_remove"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="btnClick"
        android:text="移除数据"/>

</LinearLayout>
很简单的一个线性布局,这里我添加了两个按钮,用来实现数据的添加和删除,点击和长按事件

2、Activity中主要代码:

private RecyclerView mRecycleView;
private String [] datas = {"头条","新闻","财经","视频","音乐","美女","图片","糗百","笑话","小品"
,"科技","小说","搞笑","百思不得姐","直播"};
private ArrayList<String> mList;
private TextAdapter adapter;

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

/** 初始化控件 */
private void init() {
    mRecycleView = (RecyclerView) findViewById(R.id.recycle_view);
    mList = new ArrayList<>();
    adapter = new TextAdapter(this,mList);
}
/** 数据的加载 */
private void loadData() {
    for(int i = 0; i <datas.length; i++){
        mList.add(datas[i]);
    }
    /**
     * 设置布局管理器
     * lsitview样式则为new LinearLayoutManager(this)
     * GridView样式则为new GridLayoutManager(this,3)
     * 瀑布流样式则为new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)
     *
     */
    //  mRecycleView.setLayoutManager(new LinearLayoutManager(this));
    mRecycleView.setLayoutManager(new GridLayoutManager(this,3));
   // mRecycleView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
    /** 自定义间距 */
    int space = getResources().getDimensionPixelOffset(R.dimen.space);
    mRecycleView.addItemDecoration(new SpaceItemDecoration(space));
    //设置item动画
    mRecycleView.setItemAnimator(new DefaultItemAnimator());
    mRecycleView.setAdapter(adapter);
    adapter.setmOnItemClick(this);
}
public void btnClick(View view){
    switch (view.getId()){
        case R.id.btn_add:
            adapter.addDatas(0,"数码");
            break;
        case R.id.btn_remove:
            adapter.removeDatas(0);
            break;
    }
}

@Override
public void OnClickListener(View view, int position) {
    Toast.makeText(this,"点击了第" + position + "个item",Toast.LENGTH_LONG).show();
}

@Override
public void OnLongPressListener(View view, int position) {
    Toast.makeText(this,"长按了第" + position + "个item",Toast.LENGTH_LONG).show();
}

关于RecycleView的处理有很多方式,像自定义item动画,分割线的设置等,这里只是处理了数据的添加,删除,item的点击和长按等时间,以及RecycleView的一些属性介绍,比较坑的就是RecycleView并没有ListView中的addHeaderView和addFooterView,这两个方法,如果想要添加头部和尾部的话,就需要自定义的去修改来实现,不过Github上已经有了实现代码:https://github.com/blipinsk/RecyclerViewHeader这里介绍了如何给RecycleView增加头部,当然也可以参考张鸿洋大神的博客:http://blog.csdn.net/lmj623565791/article/details/51854533

3、RecycleView的适配器:

public class TextAdapter extends RecyclerView.Adapter<TextAdapter.TextViewHolder>{

    private Context context;
    private ArrayList<String> datas;
    private OnItemClick mOnItemClick;

    public TextAdapter(Context context,ArrayList<String> datas){
        this.context = context;
        this.datas = datas;
    }

    public void setmOnItemClick(OnItemClick mOnItemClick) {
        this.mOnItemClick = mOnItemClick;
    }

    /** 添加数据 */
    public void addDatas(int position,String value){
        if(position > datas.size()){
            position = datas.size();
        }
        if(position < 0){
            position = 0;
        }
        datas.add(position,value);
        /**
         *  在指定位置添加数据
         *  使用notifyItemInserted和notifyItemRemoved时有动画效果
         * 使用notifyDataSetChanged()时,没有动画效果
         * */
        notifyItemInserted(position);
      //  notifyDataSetChanged();
    }
    /** 移除数据 */
    public void removeDatas(int position){
        if(position > datas.size() - 1){
            return;
        }
        datas.remove(position);
        /**
         * 移除指定位置的数据
         */
        notifyItemRemoved(position);
    }

    @Override
    public TextViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.adapter_recycleview,parent,false);

        return new TextViewHolder(view);
    }

    @Override
    public void onBindViewHolder(TextViewHolder holder, int position) {
        bindData(holder,position);
    }
    /** 绑定数据 */
    private void bindData(TextViewHolder holder, final int position) {
        holder.mTextView.setText(datas.get(position));
        holder.mTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mOnItemClick.OnClickListener(v,position);
            }
        });
        holder.mTextView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                mOnItemClick.OnLongPressListener(v,position);
                return true;
            }
        });

    }
    @Override
    public int getItemCount() {
        return datas.size() ;
    }
    interface OnItemClick{
        public void OnClickListener(View view,int position);
        public void OnLongPressListener(View view,int position);
    }

    class TextViewHolder extends RecyclerView.ViewHolder{
        TextView mTextView;

        public TextViewHolder(View itemView) {
            super(itemView);
            mTextView = (TextView) itemView.findViewById(R.id.text_view);
        }
    }
}

RecyclerView使用的是全新的适配器。与AdapterView使用的适配器类似,但也略有不同,比如RecyclerView必须使用标准化ViewHolder。使用时需要重写两个主要方法onCreateViewHolder和onBindViewHolder:分别用来展现视图和它的持有者和把数据绑定到视图上。这样设计的优势在于只有当我们真正需要去创建一个新视图才会调用onCreateViewHolder,不需要去检查它是否已被回收,然后再与数据绑定。而且RecyclerView不再负责Item视图的布局及显示,所以RecyclerView也没有为Item开放OnItemClick等点击事件,这就需要开发者自己实现,代码中利用了接口回调的方式来为Item增加点击和长按监听关于RecycleView的的适配器的封装:https://github.com/Wan7451/Wan_RecycleViewAdapter

4、item布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:background="#7c7a7a">
    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:gravity="center"/>

5、看一下效果:

                        

RecycleView动画的处理:https://github.com/wasabeef/recyclerview-animators

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值