过滤后ListView位置更改

时间:2018-06-14 17:48:14

标签: android listview kotlin position filtering

我正在使用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语句吗?

2 个答案:

答案 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) })