0

我目前正在开发一个具有 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)
    }
4

2 回答 2

1

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

在您的底部表中:

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)在 BottomSheet 类中运行 line。它将触发onEventHappened()您的活动中的方法。然后您可以通过您的活动上下文启动意图。

于 2020-07-04T13:10:29.487 回答
0

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

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

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

如果您正常需要活动,我们可以编写:

new intent = Intent(activity, actAbout::class.java))
startActivity(intent)
于 2020-07-04T17:35:07.840 回答