我正在使用ListView:
val animals = arrayOf("cat","dog", "mouse", "parrot", "lion", "panda")
internal lateinit var adapter: ArrayAdapter<String>
val list = findViewById(R.id.lista) as ListView
adapter = ArrayAdapter(
this@MainActivity,
android.R.layout.simple_list_item_1,
animals)
list.adapter = adapter
这是所选位置项的条件:
list.setOnItemClickListener { adapterView, view, i, l ->
when(i) {
0 -> {
webView1.loadUrl("catweb1")
phone.text = "catnumber"
webView2.loadUrl("catweb2")
}
1 -> {
webView1.loadUrl("dogweb1")
phone.text = "dognumber"
webView2.loadUrl("dogweb2")
}
2 -> {
webView1.loadUrl("mouseweb1")
phone.text = "mousenumber"
webView2.loadUrl("mouseweb2")
}
3 -> {
webView1.loadUrl("parroteweb1")
phone.text = "parrotnumber"
webView2.loadUrl("parrotweb2")
}
4 -> {
webView1.loadUrl("lionweb1")
phone.text = "lionumber"
webView2.loadUrl("lionweb2")
}
5 -> {
webView1.loadUrl("pandaweb1")
phone.text = "pandanumber"
webView2.loadUrl("pandaweb2")
}
}
我正在使用这3个按钮来获取所选项目,因为webView1位于website1布局内,webView2位于website2布局内。
web1.setOnClickListener {
ListView.visibility= View.GONE
website1.visibility= View.VISIBLE
}
web2.setOnClickListener {
ListView.visibility= View.GONE
website2.visibility= View.VISIBLE
}
phone.setOnClickListener {
makeCall(phone.text.toString())
}
我正在使用MenuSearch在列表中搜索:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android2="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android2:id="@+id/menuSearch"
android2:icon="@android:drawable/ic_menu_search"
android2:title="Search"
app:showAsAction="always"
app:actionViewClass = "android.widget.SearchView"/>
</menu>
这是代码:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.menu_search, menu)
val item = menu.findItem(R.id.menuSearch)
val searchView = item.actionView as SearchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
override fun onQueryTextChange(newText: String): Boolean {
adapter.filter.filter(newText)
return false
}
})
return super.onCreateOptionsMenu(menu)
}
当列表未被过滤时,一切正常,但我的问题在我使用过滤器后开始,如果我过滤Panda,它将始终在点击web1按钮时加载catweb1,而不是pandaweb1,它将调用单击电话按钮时的字符数,并在单击web2按钮时加载catweb2。
我已经在这里查找了类似的问题,但我只找到了针对列表视图的复杂(至少对我来说)CustomedAdapters的答案。
是否有一种简单的方法可以在过滤后保留物品的位置?
或者我应该使用某种Ifs语句吗?
答案 0 :(得分:0)
您需要创建另一个列表来存储所有初始值,如下所示
for (i in 1:10) {
data.1$PeriodType <- replace(data.1$PeriodType, data.1[i,11]=="Y", data.1[i+1,11])
}
然后
val listToFilter = mutablelistOf<...>()
listToFilter.addAll(yourList) //storing all values
答案 1 :(得分:0)
过滤后,您的列表只有1个或2个项目,因此i变量永远不会是&gt; 2.要解决这个问题,你需要动物数组的索引。
将您的when语句更改为:
when(animals.indexOfFirst { it == adapter.getItem(i) })