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,如果讀者有什麼更好的建議,可以在評論區提出,我將認真學習和接納,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章