我有這樣的任務。我想在我的應用程式中實作這樣的功能:我有一個訂閱串列,訂閱有一個訂閱價格。我知道我需要通過回圈來實作這一點,但我不知道該怎么做。我請求社區幫助我解決這個問題。
class ListFragment : Fragment() {
private var _binding: FragmentListBinding? = null
private val binding get() = _binding!!
private lateinit var mSubViewModel: SubViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
_binding = FragmentListBinding.inflate(inflater, container, false)
val view = binding.root
binding.floating.setOnClickListener {
findNavController().navigate(R.id.action_listFragment_to_addFragment)
}
//добавить меню
setHasOptionsMenu(true)
//recyclerView
val adapter = ListAdapter()
val recyclerview = binding.recycler
recyclerview.adapter = adapter
recyclerview.layoutManager = LinearLayoutManager(requireContext())
//SubViewModel
mSubViewModel = ViewModelProvider(this).get(SubViewModel::class.java)
mSubViewModel.readAllData.observe(viewLifecycleOwner, Observer { sub ->
adapter.setData(sub)
})
return view
}
}
class ListAdapter : RecyclerView.Adapter<ListAdapter.MyViewHolder>() {
private var subList = emptyList<Subscription>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val binding = ItemRvBinding
.inflate(LayoutInflater.from(parent.context), parent, false)
return MyViewHolder(binding)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val currentItem = subList[position]
with(holder) {
with(binding) {
nameTv.text = currentItem.nameSub
descTv.text = currentItem.descSub
priceTv.text = currentItem.priceSub
rowLayout.setOnClickListener {
val action =
ListFragmentDirections.actionListFragmentToUpdateFragment(currentItem)
holder.itemView.findNavController().navigate(action)
}
}
}
}
override fun getItemCount(): Int {
return subList.size
}
fun setData(subscription: List<Subscription>) {
this.subList = subscription
notifyDataSetChanged()
}
fun total(subscription: List<Subscription>) {
for (index in subscription) {
for (two in index.priceSub){
}
}
}
class MyViewHolder(var binding: ItemRvBinding) : RecyclerView.ViewHolder(binding.root) {
}
}
uj5u.com熱心網友回復:
您可以使用for回圈遍歷訂閱并計算總價:
fun total(subscriptions: List<Subscription>): Double {
var total = 0.0
for (subscription in subscriptions) {
total = subscription.price
}
return total
}
或者更簡潔的方法是對sumOf訂閱串列使用函式:
val total = subscriptions.sumOf { it.price }
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/398288.html
