Два recyclerview не прокручиваются в одном макете

#android-studio #android-layout #android-recyclerview

#android-studio #android-макет #android-recyclerview

Вопрос:

Я создал представление, в котором есть два recyclerview внутри.

Все работает правильно, но я понимаю, что два recyclerview прокручиваются.

Я бы хотел, чтобы два recyclerview отображались в максимальной длине, чтобы показать все строки и чтобы прокрутка представления работала напрямую

если я установлю android: nestedScrollingEnabled = «false», recyclerview не отображается полностью долго

что мне нужно изменить?

Спасибо

 <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:background="@color/fond"
tools:context=".dossier.FicheDossier">


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


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="115dp"
        android:layout_gravity="center|top"
        android:gravity="center|top">


        <TextView
            android:id="@ id/txtNomUsageDossierFragment"
            android:layout_width="match_parent"
            android:layout_height="86dp"
            android:background="@drawable/fond_jaune_top"
            android:fontFamily="@font/montserrat_bold"
            android:gravity="center_horizontal"
            android:onClick="backList"
            android:paddingTop="21dp"
            android:text="Dossiers"
            android:textColor="@color/white"
            android:textSize="18sp"
            android:textStyle="normal" />


        <ImageView
            android:id="@ id/btn_Back"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="23dp"
            android:layout_marginTop="23dp"
            app:srcCompat="@drawable/icone_arrow_left_blanc" />

        <EditText
            android:id="@ id/txtFindDocument"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="24dp"
            android:layout_marginTop="62dp"
            android:layout_marginRight="24dp"
            android:layout_marginBottom="4dp"
            android:height="48dp"
            android:background="@drawable/textedit_blanc_rounded_corners"
            android:drawableLeft="@drawable/icone_recherche_jaune"
            android:drawablePadding="6dp"
            android:elevation="4dp"
            android:ems="10"
            android:hint="@string/txt_input_recherche"
            android:inputType="text"
            android:maxLines="1"
            android:outlineSpotShadowColor="@color/jauneSombre"
            android:paddingLeft="10dp"
            android:scrollHorizontally="true"
            android:textStyle="italic" />


        <ProgressBar
            android:id="@ id/progressBarTopListDocument"
            style="?android:attr/progressBarStyle"
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:layout_alignParentRight="true"
            android:layout_marginTop="23dp"
            android:layout_marginRight="23dp"
            android:theme="@style/colorProgressBarTop"

            />

    </RelativeLayout>

    <TextView
        android:id="@ id/msgListDocument"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="32dp"
        android:layout_marginBottom="2dp"
        android:fontFamily="@font/montserrat"
        android:text="@string/txt_msg_dossiers"
        android:textColor="@color/neutre"
        android:textStyle="bold"
        android:visibility="gone" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@ id/list_classeurs_dossier"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="12dp"
        android:layout_marginRight="24dp"
        android:divider="@drawable/rectangle_border_bottom"
        android:dividerHeight="1dp"
        android:isScrollContainer="false"
        android:nestedScrollingEnabled="true" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@ id/list_docs_dossier"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="24dp"
        android:layout_marginRight="24dp"
        android:divider="@drawable/rectangle_border_bottom"
        android:dividerHeight="1dp"
        android:isScrollContainer="false"
        android:nestedScrollingEnabled="false" />


</LinearLayout>
  

Ответ №1:

Вы должны использовать только один RecyclerView и использовать тип для управления тем, какую карту вы хотите отозвать

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

private final List<Document> documents;
private final List<Classeur> classeurs;
private final Context context;

public RecyclerViewAdapterClasseursDocs(List<Classeur> classeurs, List<Document> documents, Context context) {
    this.classeurs = classeurs;
    this.context = context;
    this.documents = documents;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    if (viewType == 0) {
        return new ViewHolderClasseur(LayoutInflater.from(context.getApplicationContext()).inflate(R.layout.classeur, parent, false));
    }
    return new ViewHolderDoc(LayoutInflater.from(context.getApplicationContext()).inflate(R.layout.docs, parent, false));
}

@Override
public int getItemViewType(int position) {
    if (position < this.classeurs.size()){
        return 0;
    } else {
        return 1;
    }
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    //Doc
    if (holder.getItemViewType() == 0) {
        //Classeur
        ViewHolderClasseur c = (ViewHolderClasseur) holder;
        final Classeur classeur = classeurs.get(position);

        c.titleClasseur.setText(classeur.getNom());

    } else {
        ViewHolderDoc d = (ViewHolderDoc) holder;
        final Document document = documents.get(position - classeurs.size());
        d.titleDocument.setText(document.getIntitule());
    }
}

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

public static class ViewHolderClasseur extends RecyclerView.ViewHolder {
    private final TextView titleClasseur;
    private final View linearLayoutClasseur;


    public ViewHolderClasseur(@NonNull View itemView) {
        super(itemView);
        linearLayoutClasseur = itemView.findViewById(R.id.rowClasseur);
        titleClasseur = itemView.findViewById(R.id.txtClasseurTitle);

    }
}

public static class ViewHolderDoc extends RecyclerView.ViewHolder {
    private final TextView titleDocument;


    public ViewHolderDoc(@NonNull View itemView) {
        super(itemView);
        itemView.findViewById(R.id.rowDocument);
        titleDocument = itemView.findViewById(R.id.txtDocTitle);
        itemView.findViewById(R.id.txtDocData);

    }

}
  

}