2016-07-04 59 views
7

我在ScrollView中有一個RecyclerView(和一些其他視圖)。目前,RecyclerView的佈局非常小(它包含了它包含的5個項目中的2個項目),並且它獨立於ScrollView滾動,這顯然不是很棒的用戶體驗。我想讓RecyclerView不滾動和擴展,以便其所有項目都可見。我只是這樣做,因爲在應用程序的其他地方,我需要一個正常的RecyclerView滾動等,但同樣的內容,我不這樣做,我不知道這是什麼,但我不知道這是什麼。想要複製代碼)。RecyclerView不滾動並顯示所有項目

+0

滾動型沒有建立處理嵌套滾動。你有沒有檢查'NestedScrollView' – Sharj

+0

你是否設法在「NonScrollRecyclerView」中一次顯示所有項目?出於某種原因,我的回收者查看似乎沒有在添加超過3個項目後重新計算其高度 –

+0

面對類似的問題。你有沒有想出解決方案? @JeffersonTavares?我已經使用wrap_content並禁用了嵌套滾動。 –

回答

13

這很簡單,只需將RecyclerView的高度設置爲wrap_content即可。

您也可以從回收站視圖禁用嵌套的滾動,像這樣受益:

RecyclerView recycler = (RecyclerView) findViewById(R.id.recycler); 
recycler.setNestedScrollingEnabled(false); 
+0

沒錯。在一個側面說明中,我確實將'RecyclerView'的高度設置爲'wrap_content'。我面臨的問題與將觀點與畢加索的異步性和觀看進出可見區域的尷尬組合聯繫起來。這是一個完全獨立的問題。 – pstobiecki

+4

你忘了提及你必須使用NestedScrollView而不是ScrollView。我已經在下面寫了它。 –

+0

採用這種方法是不是在回收視圖時丟失了回收站視圖,只是在一個大滾動視圖中製作了一個包含所有視圖的大清單?如果您嘗試在該回收站視圖中加載大量物品,可能會「滯後」。 –

1

還嘗試玩:

android:overScrollMode 
8

setNestedScrollingEnabled解決方案(假) ISN儘可能滿:你需要使用NestedScrollView代替ScrollViewfocusableInTouchMode =「true」給NestedScrollView的子代。

如果你堅持使用ScrollView,你也應該將minHeight設置爲RecyclerView,並設置overScrollMode =「never」。在這種情況下,它仍然不是一個好的解決方案,因爲在某些情況下

其他替代解決方案,你應該考慮的可能了minHeight是不夠的:

  1. 與單一RecyclerView更換了滾動& RecyclerView ,它具有您在ScrollView中的額外視圖類型的視圖

  2. 改爲使用GridLayout或其他佈局。

+0

在'scrollView'裏面使用'recyclerView'會影響性能嗎? –

+1

如果你實施得好,它不應該。 –

0

scrollview下方用於禁用滾動,如顯示佈局中的所有項目。像這樣的東西可能會奏效:

public class NoScrollRecycler extends RecyclerView { 

    public NoScrollRecycler(Context context){ 
     super(context); 
    } 

    public NoScrollRecycler(Context context, AttributeSet attrs){ 
     super(context, attrs); 
    } 

    public NoScrollRecycler(Context context, AttributeSet attrs, int style){ 
     super(context, attrs, style); 
    } 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev){ 

     //Ignore scroll events. 
     if(ev.getAction() == MotionEvent.ACTION_MOVE) 
      return true; 

     //Dispatch event for non-scroll actions, namely clicks! 
     return super.dispatchTouchEvent(ev); 
    } 
} 

使用這樣的方式:

<com.example.custom.NoScrollRecycler 
    android:id="@+id/recyclerView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/color_white"/>