日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RecyclerView用法--展示多种类型Item数据

發布時間:2024/4/15 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RecyclerView用法--展示多种类型Item数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如題,本文主要介紹RecyclerView的基本使用方法,像ListView一樣展示多種類型的Item數據。

首先介紹一下實體類:ItemPO,用來表示每個Item代表的數據類型:

package com.example.cxc.fullscreendemo.decoration.po;import java.io.Serializable;public class ItemPO implements Serializable {private static final long serialVersionUID = 7879752396036182745L;private String name;private int age;public ItemPO(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;} }

其次,介紹一下測試的Activity頁面,其布局activity_recycler_view_test.xml及RecyclerViewTestActivity如下:

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recycler_view"android:layout_width="match_parent"android:layout_height="match_parent" /> </FrameLayout> package com.example.cxc.fullscreendemo.decoration;import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView;import com.example.cxc.fullscreendemo.R; import com.example.cxc.fullscreendemo.decoration.adapter.RecyclerViewTestAdapter; import com.example.cxc.fullscreendemo.decoration.po.ItemPO;import java.util.ArrayList; import java.util.List;public class RecyclerViewTestActivity extends AppCompatActivity {private static final String TAG = "RecyclerViewTestActivity";private RecyclerView mRecyclerView;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);//設置布局setContentView(R.layout.activity_recycler_view_test);mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);//設置LayoutManagerLinearLayoutManager layoutManager = new LinearLayoutManager(this);layoutManager.setOrientation(LinearLayoutManager.VERTICAL);mRecyclerView.setLayoutManager(layoutManager);//設置AdapterRecyclerViewTestAdapter adapter = new RecyclerViewTestAdapter();mRecyclerView.setAdapter(adapter);//設置數據List<ItemPO> items = fakeItems();adapter.notifyDataSetChanged(items);}private static final int ITEM_COUNT = 100;private static List<ItemPO> fakeItems() {List<ItemPO> items = new ArrayList<>(ITEM_COUNT);for (int i = 0; i < ITEM_COUNT; i++) {ItemPO tItem = new ItemPO("Name_" + i, i);items.add(tItem);}return items;} }

布局及Activity中的邏輯都很簡單明了,構造了100個用戶信息Item用來展示。為了UI界面的豐富性,年齡為偶數的Item,名字和年齡分兩行展示,年齡為奇數的Item名字和年齡在一行展示。如何構造ItemView并展示數據,需要使用Adapter來完成,即RecyclerViewTestAdapter。

package com.example.cxc.fullscreendemo.decoration.adapter;import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;import com.example.cxc.fullscreendemo.R; import com.example.cxc.fullscreendemo.decoration.po.ItemPO;import java.util.List;public class RecyclerViewTestAdapter extends RecyclerView.Adapter<TestBaseViewHolder> {private static final int TYPE_1 = 1;//橫向排列名字和年齡private static final int TYPE_2 = 2;//豎向排列名字和年齡private List<ItemPO> items;@Overridepublic int getItemViewType(int position) {ItemPO item = getItem(position);//age是奇數時使用TYPE_1,偶數時使用TYPE_2;return item != null && item.getAge() % 2 == 0 ? TYPE_2 : TYPE_1;}@Overridepublic TestBaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {TestBaseViewHolder holder = null;switch (viewType) {case TYPE_1:View itemView1 = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_type_1_layout, parent, false);holder = new TestViewHolder(itemView1);break;case TYPE_2:View itemView2 = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_type_2_layout, parent, false);holder = new TestViewHolder(itemView2);break;}return holder;}@Overridepublic void onBindViewHolder(TestBaseViewHolder holder, int position) {ItemPO item = getItem(position);holder.fillData(item);}@Overridepublic int getItemCount() {return items == null ? 0 : items.size();}public ItemPO getItem(int position) {return position >= 0 && position < getItemCount() ? items.get(position) : null;}public void notifyDataSetChanged(List<ItemPO> items) {this.items = items;notifyDataSetChanged();} }

其中:

public int getItemViewType(int position) :返回position位置的Item的ViewType,以便ItemView回收利用;

public int getItemCount():DataSet中數據Item的個數;

public TestBaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType):根據viewType返回相應的ViewHolder,也就是創建不同UI的ItemView;

public void onBindViewHolder(TestBaseViewHolder holder, int position):將DataSet中position位置的數據填充至該ViewHolder中展示;

運行結果如下圖如示,其中紅色/藍色各代表一個用戶信息,紅色:名字和年齡各占一行展示;藍色:名字和年齡共占一行展示;

可以根據getItemViewType()返回值在onCreateViewHolder()中創建各種各樣的Ui樣式,然后在onBindViewHolder()中將數據填充展示。

完整示例請參考:

GitHub:https://github.com/cxcbupt/FullscreenDemo

?

總結

以上是生活随笔為你收集整理的RecyclerView用法--展示多种类型Item数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。