1. 程式人生 > >RecyclerView常見問題解決方案,RecyclerView巢狀自動滾動,RecyclerView 高度設定wrap_content 無作用等問題

RecyclerView常見問題解決方案,RecyclerView巢狀自動滾動,RecyclerView 高度設定wrap_content 無作用等問題

1,ScrollView或者RecyclerView1 巢狀RecyclerView2  進入頁面自動跳轉到recyclerView2上面頁面會自動滾動
貌似是RecyclerView 自動獲得了焦點
兩種解決辦法
一,recyclerview去除焦點
recyclerview.setFocusableInTouchMode(false);
recyclerview.requestFocus();
二,在程式碼裡面 讓處於ScrollView或者RecyclerView1 頂端的某個控制元件獲得焦點即可
比如頂部的一個textview
tv_goodsName.setFocusableInTouchMode(true);  
tv_goodsName.requestFocus(); 

2,RecyclerView 高度設定wrap_content 無作用的bug,在listview中這麼設定會不顯示RecyclerView
解決方案:
這是RecyclerView相容包的bug,23.2.0後官方已經修復了。
所以直接在gradle裡設定用23.2.0及以上的RecyclerView:
compile 'com.android.support:recyclerview-v7:23.2.0'

PS:如果修改後構建時報了其他奇怪的錯,可以試試把相容包也升級一下:
compile 'com.android.support:cardview-v7:23.2.0'
compile 'com.android.support:recyclerview-v7:23.2.0'
compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.2.0'

3,RecyclerView 條目佈局寬度設定match_parent無效果的問題解決 
 //這裡為了解決recycleview不能撐滿全屏的問題,這裡layoutManager不管你佈局裡是否設定,都不準確,所以需要在程式碼裡
 //重新設定MATCH_PARENT
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()) {
            @Override
            public RecyclerView.LayoutParams generateDefaultLayoutParams() {
                return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT);
            }
        };
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        xrecyclerview.setLayoutManager(layoutManager);