提问人:Dmytro 提问时间:9/3/2023 最后编辑:Brian Tompsett - 汤莱恩Dmytro 更新时间:10/8/2023 访问量:32
RecyclerView 未显示在屏幕上
RecyclerView doesn't appear on the screen
问:
我制作了一个使用 API 的应用程序,应该在屏幕上显示一些基本数据(汇率)。
但是元素不会出现在屏幕上。我只能看到文本视图。
试图找问题一天,什么也做不了。recyclerView
下面是一些代码:
StartFragment:
class StartFragment : Fragment() {
private lateinit var binding: FragmentStartBinding
private lateinit var recyclerView: RecyclerView
private lateinit var adapter: StartAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
// Inflate the layout for this fragment
binding = FragmentStartBinding.inflate(inflater, container, false)
val viewModel = ViewModelProvider(this)[StartViewModel::class.java]
recyclerView = binding.rvStart
adapter = StartAdapter()
recyclerView.adapter = adapter
viewModel.getCash()
viewModel.myCashList.observe(viewLifecycleOwner) { list ->
list.body()?.let { adapter.setList(it) }
}
return binding.root
}
}
启动适配器:
class StartAdapter:RecyclerView.Adapter<StartAdapter.StartViewHolder>() {
private var listStart = emptyList<CashItem>()
class StartViewHolder(val binding: ItemMoneyLayoutBinding):RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StartViewHolder {
val binding = ItemMoneyLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return StartViewHolder(binding)
}
override fun getItemCount(): Int {
return listStart.size
}
override fun onBindViewHolder(holder: StartViewHolder, position: Int) {
holder.binding.itemName.text = listStart[position].ccy
holder.binding.itemBuy.text = listStart[position].buy
holder.binding.itemSale.text = listStart[position].sale
}
@SuppressLint("NotifyDataSetChanged")
fun setList(list: List<CashItem>){
listStart = list
notifyDataSetChanged()
}
}
fragment_start.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".screens.start.StartFragment">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_start"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
存储 库:
class Repository {
suspend fun getCashMoney(): Response<Cash>{
return RetrofitInstance.api.getCash()
}
suspend fun getNonCashMoney(): Response<NonCash>{
return RetrofitInstance.api.getNonCash()
}
}
只是试图删除textview“开始”,因为它可能会阻止rv。 任何其他更改代码的尝试都失败。我想使用 viewBinding 可能是一个问题,但我找不到确切的位置。
答:
1赞
storytellerF
9/3/2023
#1
缺少 LayoutManager。
就像这样:
recycleView.layoutManager = LinearLayoutManager(context)
评论