Android開發——RecyclerView的使用

使用RecyclerView 加載大量數據集已經有一端時間了,但是一直沒有對RecyclerView 總結過。今天再一次使用到RecyclerView ,就在這裏做一次詳細的總結。

引入庫

使用RecyclerView 首先需要引入類。在build.gradle文件中引入該類。

implementation 'com.android.support:recyclerview-v7:26.1.0'

LayoutManager:佈局管理器

RecyclerView和ListView、GridView不同的一點就是需要添加布局管理器。RecyclerView的佈局管理器是一個抽象類,系統提供了三個實現類:

  • LinearLayoutManager 線性佈局管理器,支持橫向或縱向選擇。
  • GridLayoutManager 網格佈局管理器 使用該佈局可以實現類似GridView的效果
  • StaggeredGridLayoutManager 瀑布流 佈局管理器 (如果想用 RecyclerView 來實現自定義效果,則應該去繼承實現 LayoutManager,並重寫相應的方法。)

RecyclerView的基本使用

recyclerview 用法其實也很簡單 activity源碼如下:

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private List<String> datas;
    private CharRecyclerAdapter recyclerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initUI();
        initData();
        initRecyclerView();
    }

    private void initRecyclerView() {
        // 定義一個線性佈局管理器
        LinearLayoutManager manager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(manager);
        //設置adapter

        recyclerAdapter=new CharRecyclerAdapter(this,datas);
        recyclerView.setAdapter(recyclerAdapter);
    }

    private void initData() {
        datas=new ArrayList<>();
        for (int i='A';i<='Z';i++){
            datas.add((char)i+"");
        }
    }

    private void initUI() {
        recyclerView=findViewById(R.id.recyclerView);
    }

}

adapter源碼如下:

public class CharRecyclerAdapter extends RecyclerView.Adapter<CharRecyclerAdapter.ViewHolder> {
    private List<String> datas;
    private Context context;
    public CharRecyclerAdapter(Context context, List<String> datas) {
        this.context=context;
        this.datas=datas;

    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
     String charStr=datas.get(position);
     holder.tv.setText(charStr);
    }

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

    static class ViewHolder extends RecyclerView.ViewHolder{
        private TextView tv;

        public ViewHolder(View itemView) {
            super(itemView);
            tv=itemView.findViewById(R.id.tv);
        }
    }
}
activity_main佈局如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   android:gravity="center"
    >
   
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v7.widget.RecyclerView>
</LinearLayout>

item佈局如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="#f0f"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <ImageView
        android:src="@mipmap/ic_launcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:text="1"
        android:gravity="center"
        android:id="@+id/tv"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />

</LinearLayout>

實現類似listview效果圖如下:

 

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