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.RecyclerView android: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; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //設定佈局 setContentView(R.layout.activity_recycler_view_test); mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); //設定LayoutManager LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(layoutManager); //設定Adapter RecyclerViewTestAdapter 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;
@Override
public int getItemViewType(int position) {
ItemPO item = getItem(position);
//age是奇數時使用TYPE_1,偶數時使用TYPE_2;
return item != null && item.getAge() % 2 == 0 ? TYPE_2 : TYPE_1;
}
@Override
public 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;
}
@Override
public void onBindViewHolder(TestBaseViewHolder holder, int position) {
ItemPO item = getItem(position);
holder.fillData(item);
}
@Override
public 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()中將資料填充展示。
完整示例請參考:
相關推薦
RecyclerView用法--展示多種型別Item資料
如題,本文主要介紹RecyclerView的基本使用方法,像ListView一樣展示多種型別的Item資料。 首先介紹一下實體類:ItemPO,用來表示每個Item代表的資料型別: package com.example.cxc.fullscreendemo.decora
讓多種型別item的Recyclerview能夠上拉和下拉重新整理--XRefreshView
什麼是XRefreshView XRefreshView是一款支援任何view上拉載入和下拉重新整理的庫,之所以說是任何view,是因為他不僅在內部適配了Recyclerview,abslistview,scrollview,webview等view,還提供了
HTTP詳解(五):HTTP POST方法傳輸多種型別的資料
上圖中主要就是上傳excel時的請求頭,我們重點看一下Content-Type,可以看出Content-Type=multipart/form-data; boundary=---------------------------3618134789,其中將Content_Type設定成multipart/fo
Android recyclerview 多個佈局 item資料錯亂
這個問題困擾了兩三天,recyclerview在採用多種佈局的情況下,在onBindViewHolder繫結的時候會,會將不會顯示的佈局用View.GONE隱藏起來,看似沒有問題!但是上下滑動的時候會發生item顯示錯亂! 原本的item資料顯示,在滑動幾次後,顯示條數只剩下幾條 走了
RecyclerView展示多種佈局
按照慣例 先看看效果圖 簡介 最上面是一個輪播圖,然後下面是一個橫向滑動的頻道,然後下面就是一個GridView,再下面就是正常的佈局顯示了 當然這還不算是很複雜的佈局,我這邊只是講講原理和實現步驟,更多複雜佈局可以根據這個去擴充套件 原理 給不同
java學習-list集合有泛型情況新增多種型別資料
//來自一道面試題的分析,大概的意思是,如果讓你在集合中增加不同型別的資料,你會怎麼做?package cn.cnsy123.ypf.thread.test; import java.lang.reflect.InvocationTargetException; impo
springboot配置多種型別多資料來源(mysql+postgresql+presto(資料倉庫))yml方式整合分頁
宣告:此處示例為mysql和postgresql資料庫和presto 三種類型資料庫源mysql與postgresql都屬於資料庫所以這裡簡寫只配置postgresql庫presto是資料倉庫在配置資料來源測試時會遇到很多坑,等下詳細描述首先宣告:我專案的springboot
RecyclerView使用,RecyclerView使用,增加一個item,刪除一個item,更新資料,item點選事件
build.gradle compile 'com.android.support:appcompat-v7:24.2.0' compile 'com.android.support:recyclerview-v7:24.2.0' main_a
if語句和case語句用法展示
法律 括號 如果 if...else 是你 acc back please status if語句和case語句用法展示
11.1 js中級,資料型別、資料儲存方式、作用域記憶體空間的區別以及例識別。
一. 基本資料型別和引用資料型別的區別。 1.基本資料型別:基本資料型別就是簡單的操作值。 2.引用資料型別:就是把引用的地址賦給變數。 堆記憶體: 就是存放程式碼塊的,存放形式有兩種 1)物件以鍵值對的形式存放 2)引用資料型別的賦值,是把引用
讀取blob型別圖片資料 儲存到本地
如何將blob型別資料的圖片資料從資料庫中讀取出來,並儲存到本地呢? 程式碼如下: 定義一個實體類: public class IdeaImgOutVo { private byte[] photo;//圖片 private String plNO;//手冊編碼
從db2資料庫讀取blob型別圖片資料並在前端頁面顯示
最近要寫一個需求,從db2中讀取圖片資料,blob型別,然後在前端頁面顯示,採用的是前後端分離的開發模式,使用下面這種方式,可以忽略前端,前端不需要動程式碼,就可直接顯示。。 直接上程式碼: sql:只給大家擷取關鍵部分,select xmlgroup(pe.Pict
使用反射技術往集合中新增不同型別的資料
public class TestException { public static void main(String[] args) throws Exception { List<String> list= new ArrayList<String>
大資料(十八):Hive元資料配置、常見屬性配置、資料型別與資料轉換
一、Hive元資料配置到MySQL當中 為什麼要把Hive的元資料配置到MySql中?我們可以使用多個客戶端連線linux系統並且都嘗試啟動Hive,可以發現在啟動第二個Hive客戶端的時候發生報錯了。  
日期型別的資料在Oracle資料庫中的儲存和查詢
使用Oracle資料庫,mybatis的對映檔案中日期型別的資料,如果定義為<result column =“UPDATED_DATE" jdbcType =“DATE” property =“updatedDate”/>,即使在後臺你為日期賦予年月日時分秒,但儲存到資料庫中將只
使用js處理後臺返回的Date型別的資料
從後臺返回的日期型別的資料,如果直接在前端進行顯示的話,顯示的就是一個從 1970-01-01 00:00:00到現在所經過的毫秒數,而在大多數業務中都不可能顯示這個毫秒數,大多數都是顯示一個正常的日期格式,所以在這裡,我們使用js對於從後臺返回的Date型別的資料進行處理. 方法一、 co
練習使用qsort函式排序各種型別的資料
練習使用qsort函式排序各種型別的資料 程式程式碼如下: #include <stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h>
資料型別以及資料型別的轉換
一、基本資料型別: byte:Java中最小的資料型別,在記憶體中佔8位(bit),即1個位元組,取值範圍-128~127,預設值0 short:短整型,在記憶體中佔16位,即2個位元組,取值範圍-32768~32767,預設值0 int:整型,用於儲存整數,在內在中佔32位,即4個位元
後端-框架-Spring-IoC-多種型別注入
後端-框架-Spring-IoC-多種型別注入 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="h
java基礎複習第二天——基本資料型別,引用資料型別,資料型別轉換,運算子
目錄 1.基本資料型別(4類八種) 2.引用資料型別 3.基本型別和引用型別的區別 4.資料型別轉換 5.運算子 ----------------------------------------------------------------------我是分割線--