Я использую MVVM в качестве архитектуры, как я могу передать объект из фрагмента (recycler + viewModel) в действие (подробное представление + viewModel)?
Это модель представления для фрагмента
class BuyViewModel : ViewModel() {
private lateinit var buys: MutableLiveData<List<Buy>>
private var buyRemote = BuyRemote()
private var buyRepository: BuyRepository = BuyRepository.getInstance(buyRemote)
fun getBuys(): LiveData<List<Buy>> {
if(!::buys.isInitialized) {
buys = MutableLiveData()
buys = buyRepository.getBuys()
}
return buys
}
}
Это Адаптер для фрагмента
class BuyAdapter(internal var context: Context,
private var resource: Int,
private var buyList: ArrayList<Buy>
) : RecyclerView.Adapter<BuyAdapter.ViewHolder>() {
override fun getItemCount(): Int {
return buyList.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context)
.inflate(resource, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val buy: Buy = buyList[position]
val propertyImages: List<String> =
buy.propertyImage.split(",")
//Start DetailView Activity
holder.itemView.setOnClickListener {
Toast.makeText(context, "clicked", Toast.LENGTH_SHORT).show()
val intent = Intent(context, BuyDetailActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
}
}
+++++++++++++++code removed for brevity+++++++++++++++++
И, наконец, это фрагмент
class BuyFragment : Fragment() {
companion object {
fun newInstance() = BuyFragment()
}
private lateinit var viewModel: BuyViewModel
private val buyList = ArrayList<Buy>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(this).get(BuyViewModel::class.java)
viewModel.getBuys().observe(this, Observer<List<Buy>> { buys ->
buyList.addAll(buys)
(rvBuy.adapter as BuyAdapter).notifyDataSetChanged()
})
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.buy_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
rvBuy.layoutManager = LinearLayoutManager(context)
rvBuy.adapter = BuyAdapter(activity!!.applicationContext,
R.layout.buy_card, buyList)
}
Как я могуреализовать это при соблюдении передового опыта.Когда пользователь щелкает элемент из представления (фрагмента) переработчика, он передает объект «Купить» в действие.Должен ли этот вид деятельности использовать модель представления самостоятельно?Как?Должно ли действие использовать ту же модель представления, что и представление рециклера фрагментов?