android - Kotlin - 类型不匹配:必需:找到上下文:上下文?
问题描述
我试图制作一个 PopupMenu
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
menu_btn.setOnClickListener {
var menu: PopupMenu?
menu = PopupMenu(this.context, it)
menu.inflate(R.menu.card_menu)
menu.setOnMenuItemClickListener {
when(it.itemId) {
R.id.menu_modify -> { Toast.makeText(context, "Modify", Toast.LENGTH_LONG).show()
true }
R.id.menu_delete -> { Toast.makeText(context, "Delete", Toast.LENGTH_LONG).show()
true }
else -> false
}
}
menu.show()
}
}
但我在下面得到了一条摆动的红线
menu = PopupMenu(this.context, it)
那就是:类型不匹配。必需:上下文找到:上下文?
甚至当我使用 !! - 我得到这个错误
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at com.example.emek1.myapplication.FragmentOne.onCreate(FragmentOne.kt:24)
at android.support.v4.app.Fragment.performCreate(Fragment.java:2414)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1418)
at android.support.v4.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1195)
at android.support.v4.app.FragmentTransition.calculateFragments(FragmentTransition.java:1078)
at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:117)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2408)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2243)
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:654)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:146)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1244)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1092)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1622)
注意:它不在 MainActivity.kt 中,它是一个片段。
解决方案
写下这段代码
context?.let {
menu = PopupMenu(it, view)
}
这里的视图将是您的弹出窗口的锚视图。
代替
menu = PopupMenu(this.context, it)
推荐阅读
- swift - 如何让我的应用程序打印“电子邮件发送”或“电子邮件已取消”?
- latex - 乳胶词汇表不会出现
- c# - EFCore Add Entity with childEntity Throw 已跟踪相同的键
- python - 通过docker CE桌面(windows)上的批处理文件运行多个python程序
- android - 如何检查用户在登录表单上输入的电子邮件用户是否存在于firebase中
- xaml - 如何在 2 行 TextBlock 中换行?
- css - 我正在尝试在移动预览的正面屏幕上获得号召性用语按钮,而不更改 Web 布局
- javascript - 传递动态数据 Victory-native 图表
- excel - Pentaho Report Designer:如果输出格式为 excel,则更改列值
- google-apps-script - 确定现有电子表格中的哪些内容正在将列转移到视图中