2016-11-05 3 views
0

У меня есть RecyclerView, который содержит кучу CardViews. Каждый CardView имеет в своем распоряжении RecyclerView. Проблема в том, что прокручивается только «главный» RecyclerView. Вложенная в CardView не фокусируется, поэтому я не могу ее прокручивать. Как я могу сделать это так, чтобы обе прокручивались?Вложенные RecyclerView не получают фокус

Родитель Layout

<android.support.design.widget.CoordinatorLayout android:id="@+id/coordinatorLayout_main" 
              xmlns:android="http://schemas.android.com/apk/res/android" 
              android:layout_width="match_parent" 
              android:layout_height="match_parent" 
              android:fitsSystemWindows="false"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recyclerView_savedFiles" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clipToPadding="false" 
    android:padding="8dp"/> 
</android.support.design.widget.CoordinatorLayout> 

Родитель адаптер

public class AdapterSavedFilesCards extends RecyclerView.Adapter<AdapterSavedFilesCards.ViewHolderSavedFilesCard>{ 

/** 
* List of cards in the recycler view 
*/ 
private final ArrayList<CardViewSavedFiles> cards; 

private final Context context; 

public AdapterSavedFilesCards(final Context context){ 
    this.context = context; 

    cards = new ArrayList<>(Arrays.asList(new CardViewSavedFiles[]{ 
      new CardViewSavedFiles("Card One"), 
      new CardViewSavedFiles("Card Two"), 
      new CardViewSavedFiles("Card Three") 
    })); 
} 

@Override 
public ViewHolderSavedFilesCard onCreateViewHolder(ViewGroup parent, int viewType){ 
    final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_saved_files, parent, false); 
    return new AdapterSavedFilesCards.ViewHolderSavedFilesCard(view); 
} 

@Override 
public void onBindViewHolder(ViewHolderSavedFilesCard holder, int position){ 

    //Get the card at this position 
    final CardViewSavedFiles card = cards.get(position); 

    holder.recyclerView.setLayoutManager(new LinearLayoutManager(context)); 
    holder.recyclerView.setItemAnimator(null); 
    holder.recyclerView.setHasFixedSize(true); 
    holder.recyclerView.setAdapter(card.getAdapterSavedFiles()); 

    holder.title.setText(card.getTitle()); 
    holder.subTitle.setText("Subtitle"); 
    ((CardView)holder.itemView).setCardBackgroundColor(ContextCompat.getColor(holder.itemView.getContext(), card.getBackgroundColor())); 
} 

@Override 
public int getItemCount(){ 
    return cards.size(); 
} 

public ArrayList<CardViewSavedFiles> getCards(){ 
    return cards; 
} 

protected class ViewHolderSavedFilesCard extends RecyclerView.ViewHolder{ 

    private final TextView title; 
    private final TextView subTitle; 
    private final RecyclerView recyclerView; 

    public ViewHolderSavedFilesCard(final View itemView){ 
     super(itemView); 
     title = (TextView) itemView.findViewById(R.id.title); 
     subTitle = (TextView) itemView.findViewById(R.id.subTitle); 
     recyclerView = (RecyclerView) itemView.findViewById(R.id.recyclerView); 
    } 
} 
} 

Компоновка Детский

<android.support.v7.widget.CardView 
android:id="@+id/cardView_savedFactors" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 

<LinearLayout 
    android:id="@+id/rootView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

    <TextView 
     android:id="@+id/subTitle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="128dp" 
     android:paddingStart="@dimen/content_padding_start" 
     android:paddingEnd="@dimen/content_padding_end"/> 

    <Button 
     android:id="@+id/button" 
     style="?android:attr/borderlessButtonStyle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 
</android.support.v7.widget.CardView> 

Адаптер для детей

public class AdapterSavedFiles extends RecyclerView.Adapter<AdapterSavedFiles.ViewHolderSavedFiles>{ 

private final ArrayList<File> files = new ArrayList<>(); 

private final FILE_TYPE fileType; 

public AdapterSavedFiles(final Context context, final FILE_TYPE fileType){ 
    this.fileType = fileType; 

    switch (fileType){ 
     case ONE: 
      files.addAll(Arrays.asList(FileManager.getInstance(context).getFilesDirOne().listFiles())); 
      break; 
     case TWO: 
      files.addAll(Arrays.asList(FileManager.getInstance(context).getFilesDirTwo().listFiles())); 
      break; 
    } 
} 

@Override 
public ViewHolderSavedFiles onCreateViewHolder(ViewGroup parent, int viewType){ 
    final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_saved_file, parent, false); 
    return new AdapterSavedFiles.ViewHolderSavedFiles(view); 
} 

@Override 
public void onBindViewHolder(ViewHolderSavedFiles holder, int position){ 

    holder.fileName.setText("List item " + position); 

    switch (fileType){ 

     case ONE: 
      holder.icon.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(holder.itemView.getContext(), R.color.primary))); 
      holder.icon.setText("P"); 
      break; 

     case TWO: 
      holder.icon.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(holder.itemView.getContext(), R.color.green))); 
      holder.icon.setText("F"); 
      break; 
    } 
} 

@Override 
public int getItemCount(){ 
    return files.size(); 
} 

public ArrayList<File> getFiles(){ 
    return files; 
} 

protected class ViewHolderSavedFiles extends RecyclerView.ViewHolder{ 

    private final TextView fileName; 
    private final TextView icon; 

    public ViewHolderSavedFiles(final View itemView){ 
     super(itemView); 
     icon = (TextView) itemView.findViewById(R.id.icon); 
     fileName = (TextView) itemView.findViewById(R.id.file_name); 
    } 
} 
} 

Layout Скриншот

enter image description here

ответ

0

Вы можете использовать ListView адаптер ребенка в onBindViewHolder вместо TextView.This может решить свитки дочерние элементы внутри CardView.

+0

Используя «ListView», я могу нажимать на элементы, но прокрутка по-прежнему не работает. – TychoTheTaco