单击搜索按钮时无法获取EditText的文本

问题描述 投票:0回答:1

我正在尝试在包含编辑文本和按钮的数组中进行搜索,但是我无法从EditText获取文本。例如,如果我将此val textSearch : String = search.text.toString()更改为textSearch : String ="a",则所有代码均有效,因此问题必须出在这里。我尝试了各种方法,但由于某种原因无法使代码正常工作。

class noticias : Fragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        val view = inflater.inflate(R.layout.noticias, container, false) as View

        val listView : ListView = view?.findViewById(R.id.news_list_view)
        val btnSearch: Button = view?.findViewById(R.id.btnSearch)

        val search : EditText = view?.findViewById(R.id.searchText)
        val textSearch : String = search.text.toString()




        var names: ArrayList<NewsObject> = arrayListOf(
                NewsObject(R.drawable.bioron, "aaaa"),
                NewsObject(R.drawable.behind, "dddd"),
                NewsObject(R.drawable.bioron, "aaaa"),
                NewsObject(R.drawable.behind, "dddd"),
                NewsObject(R.drawable.bioron, "aaaa"),
                NewsObject(R.drawable.behind, "dddd"),
                NewsObject(R.drawable.juv, "jjjjkj")
        )

        listView.adapter = MyCustomAdapter(requireContext(),names)

        fun searchNews(search: String): ArrayList<NewsObject> {
            val namesTemp:ArrayList<NewsObject> =  arrayListOf()
            for(i in names.count()-1 downTo 0){
                Log.i("sda", names[i].title)
                if(names[i].title.contains(search.trim())){
                    namesTemp.add(names[i])
                }
            }

            return namesTemp


        }

        btnSearch.setOnClickListener() {


            if(textSearch.count() == 0){
                Toast.makeText(requireContext(),textSearch, Toast.LENGTH_LONG).show()
                listView.adapter = MyCustomAdapter(requireContext(),names)
            }else{
                Toast.makeText(requireContext(),"1", Toast.LENGTH_LONG).show()
                listView.adapter = MyCustomAdapter(requireContext(), searchNews(textSearch))
            }
        }




        return view

    }

    data class NewsObject(val img: Int, val title: String)


    public class MyCustomAdapter(context: Context, namesTemp: ArrayList<NewsObject>): BaseAdapter() {
        private val mContext: Context
        val names:ArrayList<NewsObject> =  namesTemp



        init {
            mContext = context
        }


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


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


        override fun getItem(position: Int): Any {
            return "TEST STRING"
        }


        override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup?): View {
            val layoutInflater = LayoutInflater.from(mContext)
            val rowMain = layoutInflater.inflate(R.layout.news_row, viewGroup, false)

            val nameTextView = rowMain.findViewById<TextView>(R.id.name_textView)
            nameTextView.text = names.get(position).title

            /*val positionTextView = rowMain.findViewById<TextView>(R.id.position_textview)
            positionTextView.text = names.get(position).img*/

            val img = rowMain.findViewById<ImageView>(R.id.img_new)
            img.setImageResource(names.get(position).img)


            return rowMain

        }
    }
}
android kotlin android-edittext android-view
1个回答
1
投票

因为在onCreateView中有此内容:

val textSearch : String = search.text.toString()

在创建EditText之后,您将立即从EditText中检索文本,而用户才有机会实际输入任何文本。因此,它始终是默认值:在这种情况下为空字符串。

您应该将该行移动到OnClickListener,以便仅在用户单击按钮后才检索文本。

© www.soinside.com 2019 - 2024. All rights reserved.