RecyclerView常見的問題以及解決方案
2018第一個星期過了,第一篇部落格東拼西湊出來了,之前的部落格一直都是東拼西湊總結別人的內容,我暫時沒有什麼原創,就記錄一下平時開發中遇到的問題吧,也算是進步的開始了。
以下詳細描述問題以及解決方法:
1.ScrollView中巢狀RecyclerView時會導致RecyclerView中item的佈局顯示不完整,或者設定的長寬引數失效
這個問題主要是由於inflate方法引數不正確引起的。LayoutInflate.inflate()方法概述如下:
三個引數
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)
root不為null,attachToRoot為true:表示將resource指定的佈局新增到root中,新增的過程中resource所指定的的佈局的根節點的各個屬性都是有效的.如下程式碼,最後不需要add方法就能加入佈局(且不能使用add再新增,否則報錯)
LinearLayout ll = (LinearLayout) findViewById(R.id.ll); LayoutInflater inflater = LayoutInflater.from(this); inflater.inflate(R.layout.linearlayout, ll,true);
root不為null,attachToRoot為false:表示不將resource指定的佈局新增到root中,但是resource指定的佈局的根佈局的佈局引數LayoutParams有效。(root會協助resource指定的佈局的根節點生成佈局引數)
- root為null:不需要將resource指定的佈局新增到任何容器中,也不需要協助生成佈局引數。此時attachToRoot為false或true效果都一樣
兩個引數
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root)
主要分為兩種情況:- root不為null,同上attachToRoot為true的情況
- root為null,同上root為null的情況
解決方案:
在RecyclerView.Adapter中onCreateViewHolder建立佈局時採用以下方法:
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_rent_car_list
, parent,false);
2.RecyclerView將指定position位置的item移到頂部
index為要移到的position值,是從RecyclerView的item位置開始的,不是從可見位置開始。這樣跳轉比較生硬,可以採用彈性滑動,以後有時間弄弄
llManager.scrollToPositionWithOffset(index,0);
3.頂部的Banner處於無限輪播狀態,RecyclerView往下滑時,Banner可能被回收了,再滑回頂部時可能又重創了Banner,導致Banner輪播錯亂(應該是起了多個執行緒去延時更新Banner)
主要是由於Banner內部的執行緒沒有停止。因此要在BannerView的以下三個方法中停止執行緒輪播:
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
// 開始輪播
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
// 停止輪播
}
@Override
protected void onWindowVisibilityChanged(int visibility) {
if (visibility == GONE) {
// 停止輪播
} else if (visibility == VISIBLE) {
// 開始輪播
}
super.onWindowVisibilityChanged(visibility);
}
4.RecyclerView或者ScrollView巢狀RecyclerView,導致頁面切換後總是自動滑動到巢狀著的RecyclerView的頂部Item位置。
原因:RecyclerView預設會獲取焦點,所以解決方法有多種,可以讓其他的控制元件獲取焦點,或者不允許RecyclerView獲取到焦點。以下提供兩種解決方案,親測有效。
①該方案適用於巢狀的有多個RecyclerView
<RelativeLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"/>
</RelativeLayout>
②該方案只適合巢狀的只有一個RecyclerView
carInfoViewHolder.recyclerView.setFocusableInTouchMode(false);
carInfoViewHolder.recyclerView.requestFocus();
5.判斷RecyclerView滑動到底部,再進行其他操作。
解決程式碼如下。需要注意一點,在ACTION_UP中進行判斷。其中:
RecyclerView.canScrollVertically(1)的值表示是否能向上滾動,false表示已經滾動到底部
RecyclerView.canScrollVertically(-1)的值表示是否能向下滾動,false表示已經滾動到頂部
recyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
float y = 0;
switch (motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:
y = motionEvent.getRawY();
break;
case MotionEvent.ACTION_UP:
float scrollY = motionEvent.getRawY();
if(Math.abs(scrollY-y)>20){
if(!recyclerView.canScrollVertically(1)){
gotoPager(CarCenterFragment.class,null);
}
}
break;
}
return false;
}
});
相關推薦
RecyclerView常見問題解決方案,RecyclerView嵌套自動滾動,RecyclerView 高度設置wrap_content 無作用等問題
design card ont mpi 焦點 goods rap rfi 高度 1,ScrollView或者RecyclerView1 嵌套RecyclerView2 進入頁面自動跳轉到recyclerView2上面頁面會自動滾動 貌似是RecyclerVie
RecyclerView常見問題解決方案,RecyclerView巢狀自動滾動,RecyclerView 高度設定wrap_content 無作用等問題
1,ScrollView或者RecyclerView1 巢狀RecyclerView2 進入頁面自動跳轉到recyclerView2上面頁面會自動滾動貌似是RecyclerView 自動獲得了焦點兩
RecyclerView的使用總結以及常見問題解決方案
本文是RecyclerView原始碼分析系列最後一篇文章, 主要講一下我個人對於RecycleView的使用的一些思考以及一些常見的問題怎麼解決。先來看一下使用RecycleView時常見的問題以及一些需求。 RecyclerView使用常見的問題和需求 RecycleView設定了資料不顯示
RecyclerView常見的問題以及解決方案
2018第一個星期過了,第一篇部落格東拼西湊出來了,之前的部落格一直都是東拼西湊總結別人的內容,我暫時沒有什麼原創,就記錄一下平時開發中遇到的問題吧,也算是進步的開始了。 以下詳細描述問題以及解決方法: 1.ScrollView中巢狀RecyclerVi
Ubuntu 搭建svn服務器 ,以及常見錯誤解決方案
mkdir creat mod 服務 csdn 解決 details 守護 center 一、安裝命令: 1)以root身份登錄。執行:sudo su -命令 2)執行安裝命令:apt-get install subversion 二、創建項目目錄 1)mkdir /
db2 常見錯誤以及解決方案[ErrorCode SQLState]
綁定 不支持 generate replace 成功 sel 內存 one tables 操作數據庫流程中,遇到許多疑問,很多都與SQL CODE和SQL State有關,現在把一個完整的SQLCODE和SQLState不正確信息和有關解釋作以下說明,一來可以自己參考,
部署hadoop叢集ha模式常見的問題,以及解決方案
1. 叢集中的某個datanode無法啟動。 原因:可能是該節點的clusterId和master上的不一樣了,修改clusterId和master一樣的就行了。如下: 在core-site.xml中找到配置的hadoop
flume常見異常彙總以及解決方案
flume常見異常彙總以及解決方案 作者:尹正傑 版權宣告:原創作品,謝絕轉載!否則將追究法律責任。 實際生產環境
平板以及小運存手機APP使用RecyclerView卡頓解決方案
前言 最近一直在做平板類應用的開發,關於自動售貨機的系統,我也是第一次接觸硬體以及Android盒子的開發,從剛開始的陌生到現在的熟悉,感覺還是收穫挺多的,最近專案快要上線了,介面真的很簡單,展示商品用的只是RecyclerView,也沒有巢狀,但是就是滑動卡頓
常見Web安全問題以及解決方案
在常見的web系統中,最常見的幾種安全問題有:SQL注入,XSS漏洞,CSRF攻擊(跨站點請求偽造)。 1. SQL注入:SQL注入之所以存在,主要是因為工程師將外部的輸入直接嵌入到將
java中常見的異常以及解決方案-持續更新
同學們有沒有被java中的異常機制弄得頭大?不要急,接下來,就帶你熟悉熟悉java中常見的異常以及解決方法(其實就是程式碼的嚴謹性的問題) 1.java.lang.NullPointerExcepti
SpringMVC專案中常見問題以及解決方案
一、org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar
Spring Boot 常見問題以及解決方案
報database type NONE 異常 Cannot determine embedded database driver class for database type NONE 原
db2 常見錯誤以及解決方案[ErrorCode SQLState]
操作資料庫流程中,遇到許多疑問,很多都與SQL CODE和SQL State有關,現在把一個完整的SQLCODE和SQLState不正確資訊和有關解釋作以下說明,一來可以自己參考,對DB2不正確自行找出原由 (宣告:這是蒐集網上的資料得來的,細緻出處不記得了) sqlcode sqlstate
Tomcat配置常見錯誤以及解決方案
1)閃退問題 原因:tomcat軟體是java語言開發的。tomcat軟體啟動時,會預設到系統的環境變數中查詢一個名稱叫JAVA_HOME的變數。這個變數的作用找到tomcat啟動所 需的jvm。 解決辦法; 到環境變數中設定JAVA_H
常見的跨域問題以及解決方案
身為一個碼農,在日常的開發過程中難免遇到API介面跨域的問題,今天主要整理一下導致跨域問題的原因以及常用的解決方案。 導致跨域問題的原因? 跨域問題其實是由瀏覽器的同源策略導致的。 同源策略限制了從同一個源載入的文件或指令碼如何與來自另一個
Flask常見問題以及解決方案
1、傳送請求時服務端報如下錯誤InternalServerError: 500: Internal ServerErrorclass TasksAPI(Resource): def __init__(self): self.reqparse = reqpa
php網站開發常見的幾種攻擊以及解決方案
PHP網站建設中常見的安全威脅包括:SQL 注入、操縱 GET 和 POST 變數、緩衝區溢位攻擊、跨站點指令碼攻擊、瀏覽器內的資料操縱和遠端表單提交。 1、防止SQL注入攻擊 在 SQL 注入攻擊 中,使用者通過操縱表單或 GET 查詢字串,將資訊新增到資料庫查詢中
Win10下cv2安裝( python 3.5 version)以及常見錯誤解決方案
首先,在此網站中找到對應版本下載後放到 Anadonda3\Lib\site-packages 中,然後開啟anaconda prompt,進入site-packages資料夾,並執行命令pip ins
微信小程式聊天功能 WebSocket 實現傳送文字,圖片,語音以及WebSocket 常見問題解決方案
如果對你有幫助,來個關注加好評,謝謝。 小程式 WebSocket 常見問題:(本文已解決的) 1.自動斷開連結,重連但是隻能存在兩個 WebSocket 的問題。 ---1相容情況:1.1 正常聊天過一段時間 WebSocket 自動斷開後重新連結,並且儲存之前的