1. 程式人生 > >RecyclerView IndexOutOfBoundsException 引出的RecyclerView 的使用方法總結

RecyclerView IndexOutOfBoundsException 引出的RecyclerView 的使用方法總結

在彈出框中使用RecyclerView 展示一個列表,其中彈出框的高度要隨著列表數目的高度變化。

這個需求有兩種解決方案:

1.自定義一個LinearLayoutManager ,動態修改RecyclerView 的佈局高度

import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

/**
 * Created by lengqi on 2016/3/18.
 */
public class AutoHightLinearLayoutManager extends LinearLayoutManager { private int size; public AutoHightLinearLayoutManager(Context context, int sizeParam) { super(context); size = sizeParam; } @Override public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int
widthSpec, int heightSpec) { ''' int count = state.getItemCount();''' ''' if (count > 0) { ''' View view = recycler.getViewForPosition(0); if (view != null) { measureChild(view, widthSpec, heightSpec); int measuredWidth = View.MeasureSpec.getSize(widthSpec); int
measuredHeight = view.getMeasuredHeight(); setMeasuredDimension(measuredWidth, measuredHeight * size); } ''' } else { ''' ''' super.onMeasure(recycler, state, widthSpec, heightSpec); ''' ''' } ''' } }

注意高亮程式碼,要判定這個itemCount,不然 recycler.getViewForPosition(0)就會報IndexOutOfBoundsException錯誤。

2. 使用StaggeredGridLayoutManager

new StaggeredGridLayoutManager(modeList.size(), StaggeredGridLayoutManager.HORIZONTAL)

int spanCount, int orientation

注意使用寫法的順序。在setAdapter之後。

  RecyclerView mModeView = (RecyclerView) window.findViewById(R.id.rv_speed_modes);

        modeAdapter = new ModeAdapter(modeList);
        mModeView.setAdapter(modeAdapter);
        modeAdapter.notifyDataSetChanged();
        mModeView.setLayoutManager(new StaggeredGridLayoutManager(modeList.size(), StaggeredGridLayoutManager.HORIZONTAL));
        mModeView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));

相關推薦

RecyclerView IndexOutOfBoundsException 引出RecyclerView 的使用方法總結

在彈出框中使用RecyclerView 展示一個列表,其中彈出框的高度要隨著列表數目的高度變化。 這個需求有兩種解決方案: 1.自定義一個LinearLayoutManager ,動態修改RecyclerView 的佈局高度 import androi

總結幾種判斷RecyclerView到達底部的方法

今日科技快訊 近日,工信部旗下的寬頻發展聯盟給出了《中國寬頻速率狀況》2018年第三季度的報告:第三季度我國固定寬頻平均下載速度是3.12MB/s,上海、北京、江蘇名列前三;全國網速最快的城市,上海市依然位列第一,而北京市、南京市緊隨其後;三大運營商平均固網寬頻速度,其

Android RecyclerView比較常用的使用方法總結

(點選上方目錄可以跳轉) 轉載請註明出處:http://blog.csdn.net/htwhtw123/article/details/77917403 1.一般的RecyclerView(和一些注意事項) 2.下拉後從上端重新整理 3.上拉從下端重新整

RecyclerView的簡單使用方法(一)

設置 lns hello ins sta size fin ack list 1、在build中引入compile ‘com.android.support:recyclerview-v7:25.3.1‘2、在activity中布局如下: <RelativeLayo

Android PtrFrameLayout 與RecyclerView滑動衝突解決方法

原文地址:https://blog.csdn.net/Simon_Crystin/article/details/80926795   1.背景 2.主要程式碼邏輯 2.1 父View程式碼(PtrFrameLayout) 2.2 子View關鍵程式碼(RecyclerView)

Android-RecyclerView元件中setLayoutManager方法的使用,使RecyclerView更有趣

在我的部落格中有講到RecyclerView的使用,當中只是簡單的描述了一下程式碼中的setLayoutManager需要設定,那麼這個方法到底有什麼功能呢,下面我就和大家分享一下,大牛請繞過…… 原始碼是用我部落格中RecyclerView自定義佈局裡面的原始碼修改的

recyclerview的具體使用方法

1.匯入依賴implementation 'com.android.support:recyclerview-v7:26.1.0'2.建立一個介面卡(1)建立一個類,繼承RecyclerView.Adapter(<裡面的引數.ViewHolder>)這個引數必須要

RecyclerView程式碼中滾動方法(滾動並置頂)

需求 列表過長,點選浮動按鈕使RecyclerView滾動返回置頂 字母索引,快速滑動定位到某一個item並置頂 RecyclerView的原生方法 smoothScrollToPosition( int position )方法 滾動直到該It

RecyclerView 的簡單使用方法

1.RecyclerView的使用方法(使用的Android Studio開發) 首先是recyclerview的配置問題,recyclerview是要匯入android.support.v7.widget.RecyclerView的包。還要在Gradle Scripts

Android Studio中匯入v4,v7和recyclerview-v7包的方法

概述 Android Studio中新建工程中會預設匯入v7的包,即在gradle中預設配置了com.android.support:appcompat-v7:x.x.x的依賴。但是不會預設為我

javascript字符串方法總結

大小寫 comm 其他 tolower 匹配 一行 ror 運算 轉換 一、單引號字符串內部可以使用雙引號,雙引號字符串內部也可以使用單引號 "hello ‘world‘" ‘welcome "to" js‘ 二、多行和轉義 如果要在單引號字符串的內部,使用單引號(或者

web測試中的測試點和測試方法總結

動態 小數 圖片尺寸 提示信息 方便 margin style 容錯性 字符型 測試是一種思維,包括情感思維和智力思維,情感思維主要體現在一句俗語:思想決定行動上(要懷疑一切),智力思維主要體現在測試用例的設計上。具有了這樣的思想,就會找出更多的bug。 一、輸入框

C# Winform 跨線程更新UI控件常用方法總結(轉)

sum tex ase adc 而是 this obj 出現 turn 出處:http://www.tuicool.com/articles/FNzURb 概述 C#Winform編程中,跨線程直接更新UI控件的做法是不正確的,會時常出現“線程間操作無效: 從不是創建控件的

ECMAScript面向對象(二)——之創建對象方法總結

擴展 console 動態 原型 struct 私有屬性 true asc 一份 創建對象的方法 工廠模式 缺點:無法識別對象的類型,因為根本沒有定義新的對象類型 // 工廠模式創建對象 //定義 function createPerson(name,age,

day2 字符串常用方法總結

mes 一個 並且 lun int() join() eba false 換行符 字符串在Python中是常用的功能,我們知道,字符串在Python中存儲的形式是以字符數組的形式存在,比如"alex"在內存中的存儲形式是:["a","l","e","x"],因為我們

zabbix   監控平臺搭建過程中的報錯與解決方法總結

監控 zabbix 運維自動化1.php option post_max_size 2.php option max_execution_time 3.php option max_input_time 4.php time zone 5.php bcm

C# 各種導出的方法總結

src view str inf object ret temp ksh 驅動程序 第一種:使用 Microsoft.Office.Interop.Excel.dll 首先需要安裝 office 的 excel,然後再找到 Microsoft.Office.Interop.

python os模塊功能和方法總結

isp 通用 工作 相同 使用 結束 所有 erro 大量 1 os.sep 可以取代操作系統特定的路徑分割符 2 os.linesep 字符串給出當前平臺使用的行終止符。例如,Windows使用‘\r\n‘,Linux使用‘\n‘ 而Mac使用‘\r‘。

display:inline-block; 去除間隙的方法 總結

remove col rdp 設備 狀態 zha targe style div 個人常用: 如: <ul> <li><a href="#" >實時數據</a></li> <li>&l

C#把datetime類型的日期轉化成年月日或其他格式方法總結

localtime ash diff time() com color 月份 大小 -s 日期格式:yyyyMMdd HH:mm:ss(註意此字符串的字母大小寫很嚴格) yyyy:代表年份 MM: 代表月份 dd: 代表天 HH: 代表小時(24小時制) mm: