Xml 导航搜索栏中OnCreateOptions菜单中的错误
我用Kotlin做导航搜索栏 因此,当我单击MainActivity中的一个按钮时,它会打开一个新的活动,可以找到一个简单的搜索 我真的很挣扎,因为我的代码中有很多错误(我是新手,所以请对我温柔一点!) XML:Xml 导航搜索栏中OnCreateOptions菜单中的错误,xml,android-studio,kotlin,Xml,Android Studio,Kotlin,我用Kotlin做导航搜索栏 因此,当我单击MainActivity中的一个按钮时,它会打开一个新的活动,可以找到一个简单的搜索 我真的很挣扎,因为我的代码中有很多错误(我是新手,所以请对我温柔一点!) XML: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andr
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/lv_listView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tvemptyTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="No result"
android:textSize="20sp"
android:visibility="gone" />
</RelativeLayout>
搜索代码(我已经显示了代码中的错误:
class SearchActivity : AppCompatActivity() {
private lateinit var adapter: ArrayAdapter<*>
override fun onCreate(savedInstanceState: Bundle?) {
Log.d("TAG", "SearchActivity 1 JEZ")
super.onCreate(savedInstanceState)
setContentView(R.layout.search_main)
adapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_1,
resources.getStringArray(R.array.vegetables)
)
lv_listView.adapter = adapter
lv_listView.onItemClickListener =
AdapterView.OnItemClickListener { parent, view, position, id ->
Toast.makeText(
applicationContext,
parent?.getItemAtPosition(position).toString(),
Toast.LENGTH_SHORT
).show()
}
lv_listView.emptyView = tvemptyTextView
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.nav_menu,menu) /* ERROR: Unresolved reference: menu */
return super.onCreateOptionsMenu(menu)
val search: MenuItem? = menu?.findItem(R.id.nav_search) /* Unresolved reference: nav_search */
val searchView: SearchView = search?.actionView as SearchView
searchView.queryHint = "search something"
/* Plus a number of errors in this section (which I think maybe related to the earlier problem?)ln assuming : object is not abstract.../Conflicting overload.../ */
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
return false
}
override fun onQueryTextSubmit(newText: String?): Boolean {
adapter.filter.filter(newText)
return true
}
})
return super.onCreateOptionsMenu(menu)
}
}
class SearchActivity:AppCompatActivity(){
专用lateinit变量适配器:ArrayAdapter
重写创建时的乐趣(savedInstanceState:Bundle?){
Log.d(“标签”、“搜索活动1 JEZ”)
super.onCreate(savedInstanceState)
setContentView(R.layout.search_main)
适配器=阵列适配器(
这
android.R.layout.simple\u list\u item\u 1,
resources.getStringArray(R.array.vegets)
)
lv_listView.adapter=适配器
lv_listView.com侦听器=
AdapterView.OnItemClickListener{parent,view,position,id->
Toast.makeText(
应用上下文,
父项?.getItemAtPosition(position).toString(),
吐司长度
).show()
}
lv_listView.emptyView=tvemptyTextView
}
重写创建选项菜单(菜单:菜单?):布尔值{
菜单充气器。充气(右菜单。导航菜单,菜单)/*错误:未解析参考:菜单*/
返回super.onCreateOptions菜单(菜单)
val search:MenuItem?=菜单?.findItem(R.id.nav_search)/*未解析引用:nav_search*/
val searchView:searchView=search?.actionView作为searchView
searchView.queryHint=“搜索某物”
/*加上本节中的一些错误(我认为可能与前面的问题有关?),假设:对象不是抽象的…/冲突重载…/*/
searchView.setOnQueryTextListener(对象:searchView.OnQueryTextListener{
重写onQueryTextSubmit(查询:字符串?):布尔值{
返回错误
}
重写onQueryTextSubmit(newText:String?):布尔值{
适配器.filter.filter(新文本)
返回真值
}
})
返回super.onCreateOptions菜单(菜单)
}
}
如果我漏掉了任何一点,我会加进去
由于我已经为此奋斗了几天,所以任何帮助都会很棒!干杯只是一个快速提示-您可以将光标放在错误上,然后执行
Alt+Enter
,以获得一些建议和自动快速修复,以及有关错误的信息。有时它可以解释或修复问题
好的,那么
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.nav_menu,menu) /* ERROR: Unresolved reference: menu */
我不得不将它粘贴到Android Studio中,以查看哪个菜单
被突出显示为未识别的菜单-它是R.
菜单
.nav_菜单
之一。这意味着你还没有任何菜单
资源,也就是说,你的菜单
文件夹中没有菜单
XML文件urres
文件夹
所以我猜您实际上还没有创建nav_menu.xml
在Android视图中,找到您的res
文件夹,右键单击它并执行New>Android资源文件
。在Resource type
下,选择menu
并调用它nav_menu
,它应该会修复您的第一个错误,因为现在该文件已经存在并添加到您的资源中(R
内容)
这将是同样的问题-没有nav_search
ID,因此它无法识别R
中ID列表中的名称。如果您没有创建菜单,那么您还没有创建具有该ID的菜单项,对吗
这里有两个问题,但都是由同一件事引起的——较长的错误消息告诉您对象不是抽象的,因此有一个抽象方法需要实现,但您尚未实现 “冲突重载”消息告诉您已经实现了相同的方法(相同的名称、相同的参数类型和顺序、相同的返回类型) 基本上,您需要实现两个方法,但是您给了它们相同的名称-一个应该是
onquerytexsubmit
,另一个是onQueryTextChange
。它们具有正确的参数名称,因此底部的一个必须在某个时候重命名。将其更改为…Change
,这将解决这两个问题
另外,您的
onOptionsMenuCreated
方法的整个下半部分应该以警告色突出显示,如果您将鼠标悬停在它上面,它应该显示“无法访问的代码”。这是因为在无法访问的代码块开始之前的一行是一个return
语句,它退出了那里的方法。因此需要继续!和真正的return
语句(最后的一个)
必须返回true才能显示菜单;如果返回false,则不会显示菜单
太棒了!非常感谢你的帮助,我已经取得了很大的进步!谢谢!
/* Unresolved reference: nav_search */
object is not abstract.../Conflicting overload...