Android: добавление RecyclerView ниже фрагмента

#android #xml #android-layout #kotlin #android-recyclerview

#Android #xml #android-макет #kotlin #android-recyclerview

Вопрос:

Я пытаюсь добавить RecyclerView под фрагментом, который я добавляю программно, но он не отображается. Я бы хотел, чтобы RecyclerView динамически использовал оставшееся пространство экрана (поскольку фрагмент над ним может различаться по размеру), поэтому я установил ограничения по краям и установил высоту в 0dp. RecyclerView заполняется просто отлично, но отображается где-то под экраном (я должен установить высоту RecyclerView ~ 1300 dp, чтобы он отображался).

activity_main.xml

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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="match_parent"
    android:background="@color/colorPrimary">

    <ImageView
        android:id="@ id/Toolbar"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@color/colorPrimary"
        android:contentDescription="@null"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <RelativeLayout
        android:id="@ id/FragmentContainer"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:focusableInTouchMode="true"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@ id/Toolbar" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@ id/RecyclerView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@ id/FragmentContainer"/>

</androidx.constraintlayout.widget.ConstraintLayout>
  

Затем я использую этот код для программного добавления фрагмента в мой FragmentContainer:
MainActivity.kt

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Remove current fragment(s)
        for (fragment in supportFragmentManager.fragments) {
            supportFragmentManager.beginTransaction().remove(fragment!!).commit()
        }

        val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()
        var fragment: Fragment

        if (someBoolean)
            fragment = FirstFragment()
        else
            fragment = SecondFragment()

        // Add correct fragment to container
        transaction.add(R.id.FragmentContainer, fragment)
        transaction.commit()
}

  

Я пытался поместить RecyclerView в различные макеты, но результаты были ничуть не лучше. Любые идеи приветствуются!

Комментарии:

1. В RecyclerView настоящее время точно отображается в нижней части RelativeLayout , как определено в вашем XML, который является правильным. Проблема в RelativeLayout том, что у него нет нижнего ограничения.

2. Я подключил нижнее ограничение RelativeLayout к верхней части моего RecyclerView, чтобы создать цепочку, но это не помогло. Я также пытался добавить пустой ImageView между RelativeLayout и RecyclerView и связать их вместе, но мой RecyclerView по-прежнему выходит за пределы нижней части экрана, если я не установил высоту до очень высокого значения.

3. ИСПРАВЛЕНО: оба моих фрагмента, которые находятся над моим RecyclerView, имели макет ограничения с высотой «match_parent» вместо «wrap-content», что приводило к удалению моего RecyclerView за пределы экрана.