1

NestedScrollViewにネストされたRecyclerViewがあり、アダプターではコンテンツを保持するためにSortedListが使用されています。SortedListをネストしたRecyclerViewには何も表示されません。

これは私のレイアウトです:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v4.widget.NestedScrollView 
     marginTop="@{StatusbarUtils.getTopMargin(context)}" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

      <!-- some more ui elements --> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recycler_settings_cameras" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"/> 

      <!-- some more ui elements --> 

    </android.support.v4.widget.NestedScrollView> 

</FrameLayout> 

そして、私のアダプタ:

public class SettingsRecyclerViewAdapter extends RecyclerView.Adapter<SettingsRecyclerViewAdapter.ViewHolder> { 

    @NonNull private final SortedList<Camera> cameras; 

    public SettingsRecyclerViewAdapter(@NonNull final OnSettingsInteractionListener listener) { 
     cameras = new SortedList<>(Camera.class, new CameraSortedListCallback(this)); 
    } 

    public void addCamera(@NonNull final Camera camera) { 
     cameras.add(camera); 
    } 

    private static class CameraSortedListCallback extends SortedListAdapterCallback<Camera> { 

     private final RecyclerView.Adapter adapter; 

     CameraSortedListCallback(final RecyclerView.Adapter adapter) { 
      super(adapter); 
      this.adapter = adapter; 
     } 

     @Override 
     public int compare(final Camera o1, final Camera o2) { 
      return 0; 
     } 

     @Override 
     public boolean areContentsTheSame(final Camera oldItem, final Camera newItem) { 
      return false; 
     } 

     @Override 
     public boolean areItemsTheSame(final Camera item1, final Camera item2) { 
      return false; 
     } 
    } 
} 

そして、どのように私はそれを使用しています。

final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); 
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
    linearLayoutManager.setAutoMeasureEnabled(true); 

    adapter = new SettingsRecyclerViewAdapter(this); 

    recyclerView.setLayoutManager(linearLayoutManager); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setNestedScrollingEnabled(false); 
    recyclerView.setAdapter(adapter); 

私はそれを使用してaddCamera(...)何を呼び出していないことが起こります。 - (

SortedListAdapterCallbackはを呼び出すonInsertedメソッドを持っています。私がそれを無効にしてadapter.notifyDataSetChanged()を追加すると、RecyclerViewはアイテムを表示します。

@Override 
    public void onInserted(int position, int count) { 
     Timber.i("onInserted() called with: " + "position = " + position + ", count = " + count); 
     adapter.notifyDataSetChanged(); 
     super.onInserted(position, count); 
    } 

これはバグですか、間違っていますか?

答えて

1

setHasFixedSize(true)コールを削除する必要があります(デフォルトはfalse)。これが本当であるならば、あなたは彼を通知したときにrecyclerviewは、そのサイズのdoesntの変更を考えているが、これはここにそうではありません。)

希望これは

に役立ちます
関連する問題