简体   繁体   English

如何从 ViewModel 导航到 Fragment in Android Kotlin

[英]How to navigate from ViewModel to a Fragment in Android Kotlin

I have a view model I have added a click event listener.我有一个视图 model 我添加了一个点击事件侦听器。 How do I navigate from that ViewModel into a Fragment如何从该 ViewModel 导航到 Fragment

The ViewModel Code ViewModel 代码


class PromoAdapter(var promo: ArrayList<PromoModal>) :
    RecyclerView.Adapter<PromoAdapter.UserViewHolder>() {

    override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
        holder.bind(promo[position])
        holder.promoRow.setOnClickListener() {
            // Navigate to Fragment with name UserFragment
           
        };
    }
}

User Fragment Code用户片段代码

class UserFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?,
    ): View? {
        val view: View = LayoutInflater.from(container!!.context)
            .inflate(R.layout.user_page_fragment, container, false)
   }
}

I have tried writing the following code still not working我尝试编写以下代码仍然无法正常工作

Inside the ViewModel Click Event在 ViewModel 点击事件中

val intent = Intent(itemView.context, UserFragment::class.java)
itemView.context?.startActivity(intent)

I cant find something working any help will be appreciated我找不到有用的东西任何帮助将不胜感激

It's better to move the click listener to a fragment最好将点击监听器移动到一个片段

In Adapter:在适配器中:

class PromoAdapter(
    var promo: ArrayList<PromoModal>,
    val openFragment: (promoModal: PromoModal) -> Unit
  ) :
    RecyclerView.Adapter<PromoAdapter.UserViewHolder>() {

    override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
        holder.bind(promo[position])

        val currentItem = promo.getOrNull(position) ?: return

        holder.promoRow.setOnClickListener {
            openFragment(currentItem)
           
        };
    }
}

In Fragment:在片段中:

val mAdapter = PromoAdapter(
     promo = promoList,
     openFragment = { promoModal ->
          // Navigate to Fragment with name UserFragment 
     }
   )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM