【问题标题】:android - Start intent from a BottomSheet fragmentandroid - 从 BottomSheet 片段启动意图
【发布时间】:2020-07-04 12:52:11
【问题描述】:

我目前正在开发一个以 BottomSheet 作为菜单的应用程序。此菜单的目的是根据所选项目启动意图。我尝试像下面这样启动 Intent,但是 Android Studio 说:

以下函数都不能使用提供的参数调用。

  • (Context!, Class!) 在 android.content.Intent 中定义

  • (String!, Uri!) 在 android.content.Intent 中定义

我做错了什么?有没有更好的方法从类中启动 Intent?

frgBottomSheetDrawer.kt

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        super.onCreateView(inflater, container, savedInstanceState)

        navDrawer.setNavigationItemSelectedListener { menuItem ->
            when (menuItem!!.itemId) {
                R.id.ndListFolder -> Intent(this, ndActFolder::class.java).also {
                    startActivity(it) 
                }
                R.id.ndListSettings -> Intent(this, ndActSettings::class.java).also {
                    startActivity(it) 
                }
                true
            }
        }

        return inflater.inflate(R.layout.fragment_bottomsheet, container, false)
    }

【问题讨论】:

    标签: android navigation-drawer android-bottomsheetdialog


    【解决方案1】:

    您可以通过创建自定义侦听器来侦听 Activity 底部工作表中的事件。你可以这样做:

    在您的底页中:

    var mListener: BottomSheetListener? = null
    
    interface BottomSheetListener{
        fun onEventHappened(foo: Foo)
    }
    
    // Attach activity to your listener
    override fun onAttach(context: Context) {
        super.onAttach(context)
        mListener = context as BottomSheetListener
    }
    

    在您的活动中:

    class MainActivity : AppCompatActivity(), BottomSheet.BottomSheetListener
    

    它会希望你覆盖 onEventHappened 方法。

    如果您想从底部工作表导航,请在底部工作表类中运行 mListener.onEventHappened(foo) 行。它将在您的活动中触发onEventHappened() 方法。然后您可以通过您的活动上下文启动意图。

    【讨论】:

    • 感谢您的回答,我会试一试。有没有其他方法来管理这个?比如,直接在片段内部,还是其他什么?
    • 我找到了更简洁的解决方案,请查看更新后的问题。再次感谢您的回答!
    【解决方案2】:

    我找到了一个干净的解决方案。

    我们可以写一个更简洁的 Intent 行:

    this.startActivity(Intent(activity, actAbout::class.java))
    

    如果你正常需要activity,我们可以这样写:

    new intent = Intent(activity, actAbout::class.java))
    startActivity(intent)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      相关资源
      最近更新 更多