安卓进阶系列-05列表控件(RecyclerView)的使用
生活随笔
收集整理的這篇文章主要介紹了
安卓进阶系列-05列表控件(RecyclerView)的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
RecyclerView的使用
- 前言
- 在之前的博客中我介紹了ListView如何使用,當然那部分博客由于沒有考慮基礎的問題,寫的跨度太大,后面我會全部重構的。
- ListView是一個滑動列表控件,隨著手指的滑動,讓屏幕外的內容到達屏幕內,屏幕內的內容移除屏幕區域,一度被認為這是最常用也最難用的控件。(焦點、高度等問題層出不窮)但是,ListView有幾個致命的弊端,尤其的就是運行效率了,可能小項目還看不出來,但是填充數據大的時候,ListView的劣勢就體現出來了。
- 當然,在之前,我們選擇兩種主要手段提高效率。(即使用convertView代替getView(),建立內部類ViewHolder緩存控件示例,避免重復控件綁定)
- 背景
- 為了方便用戶的使用,拜托ListView的限制(只能縱向延伸),官方新增了控件RecyclerView,它被放在support庫中,所以使用需要添加依賴如下.
- implementation 'com.android.support:recyclerview-v7:27.1.1'
- 相比于ListView它優化了效率,且支持橫向滾動和瀑布流布局。還有很多優點可以查看官方文檔。
- 為了方便用戶的使用,拜托ListView的限制(只能縱向延伸),官方新增了控件RecyclerView,它被放在support庫中,所以使用需要添加依賴如下.
- 使用
- 布局中加入:編輯默認生成的activity_main.xml如下,添加控件如下
- <android.support.v7.widget.RecyclerView
- android:id="@+id/recycler_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- </android.support.v7.widget.RecyclerView>
- 創建適配器:創建java文件MyRecycleViewAdapter.java
- package com.zc.testforrecyclerview;import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;import java.util.List;public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {private List<String> mData;static class ViewHolder extends RecyclerView.ViewHolder{View myView;TextView content;public ViewHolder(View view){super(view);myView = view;content = view.findViewById(R.id.content);}}public MyRecyclerViewAdapter(List<String> Data){mData = Data;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.content, null, false);final ViewHolder holder = new ViewHolder(view);holder.myView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {int position = holder.getAdapterPosition();String str = mData.get(position);Toast.makeText(view.getContext(), "你點擊了第"+Integer.toString(position)+"項", Toast.LENGTH_LONG).show();}});return holder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {String name = mData.get(position);holder.content.setText(name);}@Overridepublic int getItemCount() {return mData.size();}
}
?
- package com.zc.testforrecyclerview;import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;import java.util.List;public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {private List<String> mData;static class ViewHolder extends RecyclerView.ViewHolder{View myView;TextView content;public ViewHolder(View view){super(view);myView = view;content = view.findViewById(R.id.content);}}public MyRecyclerViewAdapter(List<String> Data){mData = Data;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.content, null, false);final ViewHolder holder = new ViewHolder(view);holder.myView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {int position = holder.getAdapterPosition();String str = mData.get(position);Toast.makeText(view.getContext(), "你點擊了第"+Integer.toString(position)+"項", Toast.LENGTH_LONG).show();}});return holder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {String name = mData.get(position);holder.content.setText(name);}@Overridepublic int getItemCount() {return mData.size();}
}
- 注冊點擊事件
- 很遺憾,RecyclerView沒有提供類似ListView那樣的setOnItemClickListener的方法,當然這不是沒寫,而是ListView注冊事件不是很人性化,它注冊的是子項事件但是當我想要點擊子項中的某個控件就有很多焦點問題,處理比較麻煩,RecyclerView沒有這個問題,他的點擊事件寫在適配器中。
- 見上面代碼。
- 運行結果
- 布局中加入:編輯默認生成的activity_main.xml如下,添加控件如下
- 補充說明
- 參考書《第一行代碼》
- 具體項目完整代碼見我的GitHub,上層目錄也有Kotlin代碼。
總結
以上是生活随笔為你收集整理的安卓进阶系列-05列表控件(RecyclerView)的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓进阶系列-04自定义原型图片显示(C
- 下一篇: 数据分析与挖掘理论-常用算法对比(纯理论