2016-07-04 9 views
7

私はScrollViewにRecyclerView(および他のいくつかのビュー)を持っています。現在のところ、RecyclerViewは非常に小さく(5つのうち2つの項目が表示されています)、ScrollViewとは独立してスクロールされています。これは明らかに大きなUXではありません。私はRecyclerViewをスクロールしないようにして、すべてのアイテムが見えるように拡張したいと思います。スクロールせずにすべてのアイテムを表示するRecyclerView

(私はこの場合RecyclerViewを使うのは馬鹿だと知っています。私はアプリ内のどこか他の場所でスクロールしながら普通のRecyclerViewを必要としますが、同じ種類のコンテンツを必要とします。コードを複製したい)。

+0

ScrollViewは、ネストされたスクロールを処理するために構築されていません。あなたは 'NestedScrollView'をチェックしました – Sharj

+0

" NonScrollRecyclerView "にすべてのアイテムを一度に表示できましたか?何らかの理由で私のrecyclerviewが3つ以上のアイテムを追加した後でその高さを再計算していないようです –

+0

同様の問題に直面しています。あなたは解決策を見つけましたか? @JeffersonTavares?私はwrap_contentとネストされたスクロールを無効にしました。 –

答えて

13

かなり簡単です。RecyclerViewの高さをwrap_contentに設定するだけです。あなたはまたそうのような、リサイクルビューにネストされたスクロールを無効にするの恩恵を受ける可能性がある

android:overScrollMode 
+0

そうです。ちなみに、実際には 'RecyclerView'の高さを' wrap_content'に設定しました。私が直面していた問題は、ピカソの非同期性との見方と視野の出入りの見方を厄介なものにしていました。それは全く別のq/aの話題です。 – pstobiecki

+4

ScrollViewではなくNestedScrollViewを使用する必要があることを忘れてしまいました。私はそれについて以下に書いた。 –

+0

このアプローチをとっているのは、ビューをリサイクルする際にリサイクラビューを失うことなく、ビッグスクロールビューでビューのすべてのビューを含む大きなリストを作成することだけです。あなたがそのリサイクラービューで多くのアイテムをロードしようとすると、おそらく "遅れ"を起こします。 –

1

はで再生しようNestedScrollViewの子にScrollViewfocusableInTouchMode = "true"の代わりにNestedScrollViewを使用する必要があります。

ScrollViewの使用を主張する場合は、minHeightをRecyclerViewに設定し、overScrollMode = "never"と設定する必要があります。単一RecyclerViewでScrollView & RecyclerViewを交換し

  1. :minHeightプロパティは、いくつかのケースでは、あなたが考慮しなければならない

    他の代替ソリューションは十分ではないかもしれませんので、この場合には、それはまだ良い解決策ではありませんScrollViewに追加したビュータイプのビューを持っています

  2. 代わりにGridLayoutまたは別のレイアウトを使用してください。

8

setNestedScrollingEnabled の溶液(偽) ISN:また

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

'scrollView'の内部で' recyclerView'を使用してもパフォーマンスに影響しますか? –

+1

それをうまく実装すれば、それはできません。 –

0

以下のスクロールビューでは、レイアウト内のすべてのアイテムを表示するようにスクロールを無効にします。

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"/> 
関連する問題