我试图通过菜单调用ID进行搜索。
菜单:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/country_list"
android:title="search"
android:icon="@android:drawable/ic_menu_search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom"/>
</menu>
在MainActivity.kt中:
package com.dbtest.searchtobezapped
import android.app.SearchManager
import android.content.Context
import android.graphics.ColorSpace
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.widget.Toast
import androidx.appcompat.widget.SearchView
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var countries:MutableList<String> = ArrayList()
var displayList:MutableList<String> = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
country_list.layoutManager = GridLayoutManager(this,2)
country_list.adapter = CountryAdapter(displayList,this)
}
当我尝试在MainActivity中调用country_list时,仍无法解决?
请问有什么想法-真的很感激吗?
更新
因此,在终于有一些时间来看看我是否可以使它工作时……
我相信我在onCreateOptionsMenu()中有通货膨胀,在onOptionsItemSelected()中具有单击处理程序,但是我仍然从main.xml中获得ID(country_list),但在MainActivity.kt中仍未解决?
由于还有其他未解决的问题(在更新的代码中突出显示),这看起来像O缺少要导入的东西或其他东西吗?
(我花了一些时间查看https://developer.android.com/guide/topics/ui/menus,但看不到我缺少的内容。)
package com.dbtest.searchtobezapped
import android.app.SearchManager
import android.content.Context
import android.graphics.ColorSpace
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.*
import android.widget.Toast
import androidx.appcompat.widget.SearchView
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var countries:MutableList<String> = ArrayList()
var displayList:MutableList<String> = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
loadData()
country_list.layoutManager = LinearLayoutManager(this)
country_list.layoutManager = GridLayoutManager(this,2)
country_list.adapter = CountryAdapter(displayList,this)
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val inflater = menuInflater inflater.inflate(R.menu.main, menu)
val manager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
val searchItem = menu?.findItem(R.id.action_search)
val searchView = searchItem?.actionView as SearchView
searchView.setSearchableInfo(manager.getSearchableInfo(componentName))
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
searchView.clearFocus()
searchView.setQuery("", false )
searchItem.collapseActionView()
Toast.makeText(this@MainActivity, "True: Look for $query", Toast.LENGTH_LONG).show()
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
Toast.makeText(this@MainActivity, "Fail: Look for $newText",Toast.LENGTH_LONG).show()
return false
}
}
)
return true
}
class CountryAdapter(items : List<String>,ctx:Context) : RecyclerView.Adapter<CountryAdapter.ViewHolder>(){
private var list = items
private var context = ctx
override fun getItemCount(): Int {
return list.size
}
override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
holder?.name?.text = list[position]
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(context).inflate(R.layout.country_child,parent,false))
}
class ViewHolder(v: View) : RecyclerView.ViewHolder(v){
val name = v.country_name!!
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle item selection
return when (item.itemId) {
R.id.option1 -> {
//do something 1
true
}
R.id.option2 -> {
//do something 1
true
}
else -> super.onOptionsItemSelected(item)
}
}
private fun loadData(){
countries.add("Afghanistan")
countries.add("Albania")
countries.add("Zimbabwe")
displayList.addAll(countries)
}
}
答案 0 :(得分:2)
我相信菜单必须在其各自的方法回调中进行夸大:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater: MenuInflater = menuInflater
inflater.inflate(R.menu.game_menu, menu)
//here do your adapter stuff
return true
}
并处理菜单项上的点击:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle item selection
return when (item.itemId) {
R.id.option1 -> {
//do something 1
true
}
R.id.option2 -> {
//do something 1
true
}
else -> super.onOptionsItemSelected(item)
}
}
我看不到您要执行的操作,但不确定是否可以将适配器设置为菜单项