【问题标题】:Fragment Onclick Listener片段 Onclick 监听器
【发布时间】:2019-05-27 16:08:37
【问题描述】:

我在我的项目中使用底部导航活动。其中包含以下活动。我正在使用 kotlin 语言。我不确定如何在底部导航活动中从一个片段路由到另一个片段。任何帮助表示赞赏。

代码:

https://github.com/joshvapeter/KotlinBottomNavigationNew

活动

1)One Main Activity 
2)Two Fragments
3)Two Adapter Class
4)Two Layout files

期待

当我单击 Fragment One Recycler View Item 时,它需要自动将其路由到下一个底部选项卡中的 Fragment 2 Recycler View Item。以下是我在项目中使用的代码。

代码

片段一适配器

        itemView.setOnClickListener {

           Log.d("Fragment One Clicked","Fragment One Clicked")
            //FragmentTwo()

            }

MainActivity

fun ShowFragmentOne() {
    val transaction = manager.beginTransaction()
    val fragment = FragmentOne()
    transaction.replace(R.id.one, fragment)
    transaction.addToBackStack(null)
    transaction.commit()
    isFragmentOneLoaded = true
}

fun ShowFragmentTwo() {
    val transaction = manager.beginTransaction()
    val fragment = FragmentTwo()
    transaction.replace(R.id.two, fragment)
    transaction.addToBackStack(null)
    transaction.commit()
    isFragmentOneLoaded = false
}

【问题讨论】:

  • 最好在sn-p代码中省略与问题无关的部分,就像所有空的生命周期方法一样
  • 最佳使用视图模型概念

标签: android android-studio android-fragments kotlin android-fragmentactivity


【解决方案1】:

我没有足够的声望来添加评论。因此,根据我的理解,我正在写这个答案。如果我的理解有误,请评论。

据我所知,当在 FragmentOne 的 RecyclerView 中单击一个项目时,您想要移动到 FragmentTwo。您可以通过以下方式实现它:

FragmentOne

fun onItemSelected(item:MyModel){
    (activity as MainActivity).showFragmentTwo(item)
}

FragmentOneAdapter

class FragmentOneAdapter(val fragment:FragmentOne,val myList:ArrayList<MyModel>):RecyclerView.Adapter<MyViewHolder>(){
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): MyViewHolder {
    //your code to create view holder
}

override fun onBindViewHolder(p0: MyViewHolder, p1: Int) {
    p0.bindItem(myList[p1], fragment)
}

override fun getItemCount(): Int {
    return myList.size
}

class MyViewHolder(view:View):RecyclerView.ViewHolder(view){
    fun bindItem(item:MyModel,frag:FragmentOne)=with(itemView){
        setOnClickListener{
            frag.onItemSelected(item)
         }
      }
   }
} 

【讨论】:

  • 感谢@ankuranurag2 的评论,您是对的,但是在使用上述代码时出现错误。我们可以聊聊吗?请告诉我。
  • 当然可以聊聊。
  • 您也可以在遇到问题的地方提供代码 sn-p。
  • 我在我的问题中添加了粗略的图表。如果您有任何问题,请告诉我。
  • 如果我在我的片段中添加 frag.onItemSelected(item) 则会出现错误,因为此方法不存在。
猜你喜欢
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
相关资源
最近更新 更多