android - 从 BottomSheet 片段开始意图

android - Start intent from a BottomSheet fragment

我目前正在开发一个应用程序,它有一个 BottomSheet 作为菜单。这个菜单的objective是根据选择的项目启动intents。我尝试启动如下所示的 Intent,但是 Android Studio 说:

None 以下函数可以使用提供的参数调用。

我做错了什么?有没有更好的方法从 class 开始 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)
    }

您可以通过创建自定义侦听器从 activity 中侦听底部 sheet 中的事件。你可以这样做:

在您的底页中:

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
}

在你的 Activity:

class MainActivity : AppCompatActivity(), BottomSheet.BottomSheetListener

它会要求您覆盖 onEventHappened 方法。

当您想从 BottomSheet class 中的 sheet、运行 mListener.onEventHappened(foo) 行开始导航时。它将触发 Activity 中的 onEventHappened() 方法。然后,您可以根据 activity 上下文启动意图。

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

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

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

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

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