安卓開發中RecycleView簡單使用步驟

帥德QVQ發表於2021-01-02

RecycleView的簡單使用

RecycleView的簡單使用總共分為以下幾個步驟:

  1. 在Layout中尋找合適位置新增RecycleView(如果輸入RecycleView沒有彈出相關控制元件,可以去新增一下依賴檔案);
  2. 建立一個recycleView_item.xml檔案,這個檔案是單個recycleView的佈局樣式,比如:
 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="100dp"
    android:orientation="vertical"
    android:layout_margin="5dp"
    >
    <ImageView
        android:id="@+id/smsImage"
        android:layout_width="50dp"
        android:layout_height="50dp"
        />
    <TextView
        android:id="@+id/smsText"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        android:textSize="20sp"
        />
</LinearLayout>


定義的是圖片加文字,注意一下,這個layout佈局的高寬需要控制好,防止出現遮擋或者顯示不全的情況。

  1. 建立一個pojo類,pojo其實就是一個名稱,類裡面採用對映方法,先定義兩個引數,然後通過code->generate->constructor和code->generate->Getter and Setter對定義的引數進行重寫,該pojo類將作為介面卡中List泛型;
  2. 最最最重要的東西來了,介面卡Adapter。什麼是介面卡,我的理解就是將控制元件與java類聯絡在一起的東西。可能有疑問,不是用findViewById就可以嗎?沒錯的,可是對於recycleView這個控制元件來說,其操作可能比較複雜,需要一個東西去很好的管理這個控制元件。下面通過程式碼來說明介面卡如何配置(最簡單的配置,如果新增事件或者別的東西需要再改動):
public class SmsRecycleViewAdpter extends RecyclerView.Adapter<SmsRecycleViewAdpter.SmsViewHolder> {


   private List<Sms_pojo> mDatas;

   class SmsViewHolder extends RecyclerView.ViewHolder {
       TextView tv;
       ImageView imageView;

       public SmsViewHolder(@NonNull View itemView) {
           super(itemView);
           tv = itemView.findViewById(R.id.smsText);
           imageView = itemView.findViewById(R.id.smsImage);
       }
   }


   @NonNull

   @Override
   public SmsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

       View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sms_item, parent, false);
       SmsViewHolder holder = new SmsViewHolder(view);
       return holder;
   }

   @Override
   public void onBindViewHolder(@NonNull SmsViewHolder holder, int position) {
       Sms_pojo sms_pojo = mDatas.get(position);
       holder.tv.setText(sms_pojo.getName());
       holder.imageView.setImageResource(sms_pojo.getImageId());


   }
     public SmsRecycleViewAdpter(List<Sms_pojo> datas) {
       this.mDatas = datas;

   }
   @Override
   public int getItemCount() {
       return mDatas.size();
   }


}

建立這個介面卡需要有幾個步驟,並不是對著網上的程式敲進去進行了。首先建立介面卡類並繼承RecyclerView.Adapter沒有什麼毛病,至於後面的泛型,是後新增的 。建立好了介面卡(SmsRecycleViewAdpter)類之後,系統會為我們自動實現下面的方法:

  @NonNull

   @Override
   public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
       return false;
   }

   @Override
   public void onBindViewHolder(@NonNull Holder  holder, int position) {
   }
 
   @Override
   public int getItemCount() {
       return 0;
   }
}

接下來需要在該類中建立一個內部Holder類(public),繼承自Holder,Holder的英文翻譯是持有者,我的理解它應該是View管理者,這與它自動建立的構造方法有關。下一步將一起完成介面卡類的設定。

  1. 首先將介面卡類中自動重寫的方法體中的Holder全部修改為我們建立的Holder類,同時在介面卡類定義那裡新增泛型</中間放置定義的Holder,格式為adapter.holder/>。然後再在定義的holder內部類中初始化控制元件。定義變數List</泛型,這裡就是新增對映pojo類/>,該變數將在介面卡類的建構函式中初始化。onCreateViewHolder()方法作用是將holder 與View繫結,onBindViewHolder()方法是將recycleView_item.xml與holder,這樣就通過holder這個中間量將View與佈局控制元件繫結在一起,呈現的關係為:View->holder->.xml。整個介面卡簡單定義過程就是這樣的。
  2. 切換到recycleView控制元件所在的佈局檔案所對應的類,建立RecycleView物件,建立List<>,建立佈局管理(線性為LinearLayout,網格的為GridLayout,還有個瀑布流佈局),初始化recycleView物件並設定其分割線,通過addItemDecoration()方法,這裡可以呼叫安卓自帶的分割線,也可以自定義分割線。系統自帶的使用方法:
 recyclerView.addItemDecoration(new DividerItemDecoration(mContext,LinearLayoutManager.HORIZONTAL));

自定義分割線方法:

DividerItemDecoration dividerItemDecoration=new DividerItemDecoration(mContext, LinearLayout.HORIZONTAL);
        dividerItemDecoration.setDrawable(mContext.getDrawable(R.drawable.divider));
        recyclerView.addItemDecoration(dividerItemDecoration);

這裡的R.drawable.divider資原始檔為分割線資原始檔,建立方法為在drawable中建立divider.xml,具體樣式可以自行設定,例如(如果為橫向就設定分割線的寬,縱向就設定分割線的高):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <size android:width="1dp" />
    <solid android:color="#512DA8"/>
</shape>

最後:
如何讓recycleView中出現內容呢,別忘了建立的List<>,通過把pojo對映類放入<>,就可以很輕鬆的實現內容的顯示。比如要新增一組資料,就可以通過pojo類初始化一個物件,然後把該初始化的物件新增進List<>中,例如(我這裡使用的是一個迴圈,顯示20組資料):

list = new ArrayList<pojo>();
        for (int i = 0; i < 20; i++) {
            Sms_pojo sms_pojo = new Sms_pojo("獲取贊"+i+"個", R.drawable.head);
            mdate.add(sms_pojo);
        }

這樣操作就能將recycleView進行簡單建立和使用了,與ListView區別就在於內容呈現方式,RecycleView除了線性佈局外還有網格佈局和瀑布流佈局並且切換佈局很方便,只需要修改幾行程式碼就可以了,可以自行百度。

相關文章