#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 за пределы экрана.