Поиск в пользовательском списке, с панели инструментов - Kotlin - PullRequest
0 голосов
/ 11 июня 2019

Мне нужно отфильтровать мой список, пока я пишу на панели инструментов.

CustomList: это макет с 3 textView.FullList: это действие с ListView

i Заполнение FullList из таблицы SQLitle

FullList.kt:

override fun onCreate(savedInstanceState: Bundle?) {
        ...
        setSupportActionBar(toolbar)
        supportActionBar!!.setDisplayHomeAsUpEnabled(true)

        var listView = findViewById<ListView>(R.id.listView)
        val customAdptor = CustomAdapterListView(this)
        listView.adapter=customAdptor
    }

class CustomAdapterBJCP(private val context: Activity): BaseAdapter(){

    var db = DataBaseHandler(context)
    var data = db.DataExample()

    override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
        val inflater = context.layoutInflater
        val view1 = inflater.inflate(R.layout.CustomList,null)
        var fName= view1.findViewById<TextView>(R.id.txtOne)
        var FDetail= view1.findViewById<TextView>(R.id.txtTwo)
        var fCount = view1.findViewById<TextView>(R.id.txtThree)

        fName.text = data[p0].name
        FDetail.text = data[p0].detail
        fCount .text= data[p0].count
        return view1
    }

    override fun getItem(p0: Int): Any {
        return data.get(p0).name
    }

    override fun getItemId(p0: Int): Long {
        return p0.toLong()
    }

    override fun getCount(): Int {
        return data.size
    }


    }

для поиска в ListView Я реализовал пункт меню:

<menu...>
<item android:id="@+id/action_search"
          android:title="Search"
          app:showAsAction="always|collapseActionView"
          android:icon="@android:drawable/ic_menu_search"
          app:actionViewClass="android.support.v7.widget.SearchView"  />
</menu>

по этой причине я решил создать эту функцию внутри FullList.kt:

...
 override fun onCreateOptionsMenu(menu: Menu): Boolean {

        menuInflater.inflate(R.menu.menu_main,menu)
        val searchItem = menu.findItem(R.id.action_search)
        if(searchItem!=null){
            val searchView=searchItem.actionView as SearchView
            searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
                override fun onQueryTextSubmit(query: String?): Boolean {
                    return true
                }
                override fun onQueryTextChange(newText: String?): Boolean {
                    return true
                }

            })
        }
        return super.onCreateOptionsMenu(menu)
    }
...

Теперь мне нужно вставить слово в панель инструментов поиска и найти элемент в ListView

как я могу это сделать в Котлине?

извините, если мой английский плохой, я из Перу.

THX заранее.

1 Ответ

0 голосов
/ 11 июня 2019

Я надеюсь, что это будет работать для вас

В методе Activity on Create() получают данные из локальной базы данных, а не из адаптера.

поэтому метод onCreate ():

 override fun onCreate(savedInstanceState: Bundle?) {
            ...
            setSupportActionBar(toolbar)
            supportActionBar!!.setDisplayHomeAsUpEnabled(true)

            var db = DataBaseHandler(context)
            var data = db.DataExample()  //this method must be return interms of your pojo class type.

            var listView = findViewById<ListView>(R.id.listView)
            val customAdptor = CustomAdapterBJCP(this,data)
            listView.adapter=customAdptor
        }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {

            menuInflater.inflate(R.menu.menu_main,menu)
            val searchItem = menu.findItem(R.id.action_search)
            if(searchItem!=null){
                val searchView=searchItem.actionView as SearchView
               searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
                override fun onQueryTextSubmit(query: String?): Boolean {
                    return true
                }

                override fun onQueryTextChange(newText: String?): Boolean {
                    if (newText != null) {
                   /* var dataList : List<Your Pojo Class> = list.filter { it.name.startsWith(newText) }
                         .sortedBy { it.name }*/

                      var dataList: MutableList<Your Pojo Class> = data.filter { it.name.startsWith(newText) }.toMutableList()  // data is list (i.e you get data from db)

                      if (dataList.size.equals(0)) {
                        Toast.makeText(this@MainActivity, "No Record Found", Toast.LENGTH_SHORT).show()   
                      }

                        for (item in dataList) {
                            System.out.println("Searched Data: " + item.name)
                        }

                       customAdptor = CustomAdapterBJCP(dataList , this@Your Activity)
                       listView.adapter = customAdptor 
                       customAdptor?.notifyDataSetChanged

                    }
                    return true

                }

            })
            }
            return super.onCreateOptionsMenu(menu)
        }

Модифицируйте свой адаптер

class CustomAdapterBJCP(private val context: Context, var data: MutableList<Your Pojo Class>)BaseAdapter(){

  //  var db = DataBaseHandler(context)
    //var data = db.DataExample()

    override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
        val inflater = context.layoutInflater
        val view1 = inflater.inflate(R.layout.CustomList,null)
        var fName= view1.findViewById<TextView>(R.id.txtOne)
        var FDetail= view1.findViewById<TextView>(R.id.txtTwo)
        var fCount = view1.findViewById<TextView>(R.id.txtThree)

        fName.text = data.get(p0).name
        FDetail.text = data.get(p0).detail
        fCount .text= data.get(p0).count
        return view1
    }

    override fun getItem(p0: Int): Any {
        return data.get(p0).name
    }

    override fun getItemId(p0: Int): Long {
        return p0.toLong()
    }

    override fun getCount(): Int {
        return data.count()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...