RecyclerView简述

      在Android应用开发过程中,有一个控件——RecyclerView被越来越多的开发者们使用,原因是他在功能上不仅可以实现ListView的功能,还有GridView的功能,不仅可以纵向滚动还可以横向滚动,另外支持局部刷新,这些都是ListView控件无法实现的,因此在功能上大大强于ListView,所以已经取代ListView进行开发了。下面我们就来看看它的使用方式。

      第一步先是在Gradle中添加相应地址,如下:

    compile 'com.android.support:recyclerview-v7:25.1.1'

     第二步就是在xml中添加UI:

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

   第三步,创建相应bean文件,封装需要显示的数据:

package com.example.guoxiang.myapplication.bean;

/**
 * Created by guoxiang on 2020/5/21.
 */

public class UserBean {
    public UserBean(int drawable, String content) {
        this.drawable = drawable;
        this.content = content;
    }

    public int getDrawable() {
        return drawable;
    }

    public void setDrawable(int drawable) {
        this.drawable = drawable;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    private int drawable;
    private String content;

}

    目前的数据中只包含图片和文字,可以根据需要封装更多更复杂的数据类型

    第四步,创建适配器layout,如下:

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

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/img"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tex"/>

</LinearLayout>

      第五步,创建adapter适配器

package com.example.guoxiang.myapplication.adapter;

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

import com.example.guoxiang.myapplication.R;
import com.example.guoxiang.myapplication.bean.UserBean;

import java.util.List;

/**
 * Created by guoxiang on 2020/5/21.
 */

public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.ViewHolder> {
private List<UserBean>  lists;

    public RecycleViewAdapter(List<UserBean> lists) {
        this.lists = lists;
    }

    //如下方法是用于创建ViewHolder实例,并把加载的布局传入到构造函数去,再把ViewHolder实例返回。
    @Override
    public RecycleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.aaa,parent,false);
        ViewHolder holder=new ViewHolder(view);
        return holder;
    }

    //如下方法是得到显示列表的数目
    @Override
    public int getItemCount() {
        return lists.size();
    }

    //如下方法是用于对子项的数据进行赋值,会在每个子项被滚动到屏幕内时执行。position得到当前项的UserBean实例。
    @Override
    public void onBindViewHolder(RecycleViewAdapter.ViewHolder holder, int position) {
        if(lists!=null&&lists.size()>position) {
            holder.img.setImageResource(lists.get(position).getDrawable());
            holder.tex.setText(lists.get(position).getContent());
        }
    }

   //创建ViewHolder对象,用于OnCreateViewHolder中返回使用
    static class ViewHolder extends RecyclerView.ViewHolder{
        ImageView img;
        TextView tex;
        public ViewHolder(View view){
          super(view);
            img=(ImageView)view.findViewById(R.id.img);
            tex=(TextView)view.findViewById(R.id.tex);
        }
    }
}

    第六步:

  MainActivity中初始化RecyclerView,并加载RecycleViewAdapter

  

public class MainActivity extends AppCompatActivity implements View.OnClickListener,ViewImp{
    private String url="https://www.baidu.com/img/bd_logo1.png";
    private Button button;
    private MyPresenter myPresenter;
    private ImageView imageView;
    private ProgressBar progressBar;
    private RecyclerView mRecyclerView;
    private List<UserBean> lists;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button);
        button.setOnClickListener(this);
        imageView=(ImageView)findViewById(R.id.imageView);
        myPresenter=new MyPresenter(this);
        progressBar=(ProgressBar)findViewById(R.id.progressBar);
        //此处开始初始化适配器中的数据
        initList();
        //初始化RecyclerView
        mRecyclerView=(RecyclerView)findViewById(R.id.recycleView);
        //设置RecyclerView布局是线性
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(linearLayoutManager);
        //添加适配器
        RecycleViewAdapter adapter=new RecycleViewAdapter(lists);
        mRecyclerView.setAdapter(adapter);


    }

    private void initList(){
        lists=new ArrayList<>();
        lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang"));
        lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang1"));
        lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang2"));
        lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang3"));
        lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang4"));
        lists.add(new UserBean(R.mipmap.ic_launcher,"dadaxiang5"));
    }

    至此整个的创建和数据的加载都已经完成,写的比较的简单,但是复杂的RecyclerView的创建都是从简单的去进行扩展的,希望看到的读者可以学习到一些基本的知识点,然后加以思考,做出更好更复杂的UI,如果读者有什么更好的建议,可以在评论区提出,我将认真学习和接纳,谢谢。

おすすめ

転載: blog.csdn.net/daxiangzaici/article/details/106260793