1

私は上部にいくつかの要素があり、その下にrecyclerViewという簡単なビューを作成しています。下にスクロールすると、唯一のリサイクル業者ではなく、画面全体をスクロールしたいと考えています。ScrollviewのRecyclerView(入れ子ですか?)、アイテムを動的にバインドする方法は?

私はNestedScrollViewでこれを達成しましたが、問題が表示されます。リスト内のアイテムはかなり重く、この設定では、すべてのアイテムが同時にバインドされます(onBindViewHolderのコール)。

どのようにしてリサイクルしてこの問題を解決するか?

ザ・甘い解決策を見つけた:あなたはItemDecorationなどの複雑なヘッダを追加し、その大きな原因アダプタがそのまま滞在することができ、あなただけの追加ここ

は更新

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/darker_gray" 
    android:orientation="vertical" 
    tools:context="com.gkuziel.testkotlin.MainActivity"> 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <ImageView 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:src="@drawable/ic_available_stores_default" /> 

     <TextView 
      android:id="@+id/text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="test text" /> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/list_test" 

      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:isScrollContainer="false" 
      android:nestedScrollingEnabled="false"> 

     </android.support.v7.widget.RecyclerView> 
    </LinearLayout> 
</android.support.v4.widget.NestedScrollView> 

私のxmlファイルでありますこのようなsth: recyclerView.addItemDecoration(dividerItemDecoration); このソリューションの唯一の欠点は、このヘッダーをクリック可能にすることができなかったことです(私の場合、別のrecyclerViewが含まれています)。

この時点では、ヘッダータイプの1インスタンスと残りの単純な行タイプを使用して異種リサイクルビューを実装することにしました。重要である何

は、ヘッダタイプは、完全にHeaderViewHolderコンストラクタで一度バインドされ、onBindViewHolderは次のようになります。

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { 
    if (holder is HeaderViewHolder) { 
     //do nothing 
     Log.d("ProductAdapter", "Binding: Header") 

    } else if (holder is ItemViewHolder) { 
     Log.d("ProductAdapter", "Binding: " + position.toString()) 
     val searchItem = items!![position - 1] 

     //here the proper binding is going on 
    } 
} 
+1

リサイクルビューにヘッダービューを追加します。 –

+0

可能重複:https://stackoverflow.com/questions/47910751/aarangement-of-views-with-a-scrollable-layout-and-a-filter-panel/47912554#47912554 – realdm

+0

プレースホルダーとしてサイズを追加するリサイクルビューのアイテムの画像ですので、1pxを占めて画面全体を膨らませてしまいます。 –

答えて

0

あなたがfalseにrecyclerviewレイアウトマネージャのメソッドcanScrollVerticalを設定してみてくださいすることができますし、それが応答しません任意のタッチインナースクロールイベント。

以下のメソッドをオーバーライドし、falseを返します。

boolean canScrollVertically() 

ここで設定する方法です。

 @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // ... 
     // Lookup the recyclerview in activity layout 
     RecyclerView listTest = (RecyclerView) findViewById(R.id.list_test); 

     // Attach the adapter to the recyclerview to populate items 
     listTest.setAdapter(adapter); 
     // Set layout manager to position the items 
     listTest.setLayoutManager(new LinearLayoutManager(this){ 
     @Override 
     public boolean canScrollVertically(){ 
     return false; 
     }   
    }); 
     // That's all! 
    } 
+0

ありがとうございます。 – goyo

関連する問題