1. 程式人生 > >RecyclerView常見的問題以及解決方案

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 自動斷開後重新連結,並且儲存之前的