有问题RecyclerView
,我在 Google 中找不到解决方案。里面有一个片段RecyclerView
。元素被生成但不被渲染。
class HistoryFragment : Fragment() {
private var scans: List<Scan> = emptyList()
private val ioScope = CoroutineScope(Dispatchers.IO)
private lateinit var recyclerView: RecyclerView
private lateinit var viewAdapter: ScanHistoryAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_history, container, false)
viewAdapter = ScanHistoryAdapter(scans, (activity as MainActivity).db)
recyclerView = view.findViewById<RecyclerView>(R.id.scanlist).apply {
setHasFixedSize(true)
adapter = viewAdapter
}
ioScope.launch {
scans = (activity as MainActivity).getScans()
viewAdapter.updateDataset(scans)
}
return view
}
}
片段 XML - https://github.com/LazyTechwork/QRScanner/blob/master/app/src/main/res/layout/fragment_history.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">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/scanlist"
android:layout_width="match_parent"
android:layout_height="0dp"
android:scrollbars="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constrainedHeight="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:listitem="@layout/history_item" />
</androidx.constraintlayout.widget.ConstraintLayout>
class ScanHistoryAdapter(private var dataset: List<Scan>, private val db: AppDatabase) :
RecyclerView.Adapter<ScanHistoryAdapter.ViewHolder>() {
class ViewHolder(val historyItem: HistoryItem) : RecyclerView.ViewHolder(historyItem)
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ViewHolder =
ViewHolder(HistoryItem(parent, db))
fun updateDataset(scans: List<Scan>) {
dataset = scans
notifyDataSetChanged()
}
override fun getItemCount(): Int = dataset.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val viewItem = holder.historyItem
val scan = dataset[position]
viewItem.setScan(scan)
}
}
在 Android Studio 中一切正常。