Итак, я некоторое время отлаживал, и я не могу найти, где моя ошибка. На моей консоли отладки он показывает размер списка элементов, который я получаю из ответа, с данными, связанными с каждым элементом в списке. Он также показывает идентификатор текстовых представлений, которые я установил на адаптере, но когда я загружаю приложение, я получаю только сообщение Toast, которое я установил в своем фрагменте, чтобы убедиться, что я получаю данные, но нет данных в моих текстовых представлениях
ListFragment
class ListFragment : Fragment() {
private val spaceVM : MainViewModel by viewModels()
private lateinit var spaceAdapter: SpaceAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_list, container, false)
}
override fun onResume() {
super.onResume()
setUpObserver()
}
private fun setUpObserver(){
spaceVM.spaceLiveData.observe(this, Observer {
val data = spaceVM.spaceLiveData.value
if (data != null) {
Toast.makeText(context, data.toString(), Toast.LENGTH_LONG).show()
//ID of my recycler view using Kotlin Android Extensions
rvSpace.apply {
layoutManager = LinearLayoutManager(activity)
spaceAdapter = SpaceAdapter()
spaceAdapter.submitSpaceList(data)
adapter = spaceAdapter
}
}
})
}
}
SpaceAdapter
class SpaceAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var items : List<SpaceXResponse> = ArrayList()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return SpaceViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.card, parent, false)
)
}
override fun getItemCount(): Int {
return items.size
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when(holder){
is SpaceViewHolder ->{
holder.bind(items.get(position))
}
}
}
fun submitSpaceList(spaceList : List<SpaceXResponse>){
items = spaceList
}
class SpaceViewHolder constructor(itemView: View) : RecyclerView.ViewHolder(itemView){
val missionName : TextView = itemView.tvMissionName
val rocketName : TextView = itemView.tvRocketName
val launchSite : TextView = itemView.tvLaunchSite
val dol : TextView = itemView.tvDOL
fun bind(spacePost : SpaceXResponse){
missionName.setText(spacePost.missionName)
rocketName.setText(spacePost.rocket?.rocketName)
launchSite.setText(spacePost.launchSite?.siteName)
dol.setText(spacePost.launchDateLocal)
}
}
}
Может быть, это может быть способ, которым я установил свой держатель на onBindViewHolder? Я поставил на него точку останова отладки и получаю: "ViewHolder {e0b3537 position = 0 id = -1, oldPos = -1, pLpos: -1 no parent}" Но я чувствую, что уже добавил родителя в onCreateViewHolder
Вот мой фрагмент xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
tools:context=".view.ListFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toTopOf="@+id/card"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvSpace"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
А вот моя карта xml Я пытаюсь накачать в свой RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="10dp"
android:gravity="center"
app:layout_constraintBottom_toTopOf="@+id/card"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="305dp">
<TextView
android:id="@+id/tvMissionName"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/tvRocketName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvRocketName"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/tvLaunchSite"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvMissionName" />
<TextView
android:id="@+id/tvLaunchSite"
android:layout_width="match_parent"
android:layout_height="0dp"
android:text="@{space.launchSite.siteName}"
app:layout_constraintBottom_toTopOf="@id/tvDOL"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvRocketName" />
<TextView
android:id="@+id/tvDOL"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/ivImage"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvLaunchSite" />
<ImageView
android:id="@+id/ivImage"
android:layout_width="350px"
android:layout_height="350px"
android:src="@drawable/ic_launcher_background"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>