Android Can';单击“搜索”按钮时无法获取编辑文本的文本

Android Can';单击“搜索”按钮时无法获取编辑文本的文本,android,kotlin,android-edittext,android-view,Android,Kotlin,Android Edittext,Android View,我试图用编辑文本和按钮在数组中搜索,但无法从编辑文本中获取文本。例如,如果我将此val textSearch:String=search.text.toString()更改为textSearch:String=“a”,则所有代码都有效,因此问题一定在这里。我尝试了各种方法,但由于某种原因无法使代码正常工作 class noticias : Fragment() { override fun onCreateView(inflater: LayoutInflater, container

我试图用编辑文本和按钮在数组中搜索,但无法从编辑文本中获取文本。例如,如果我将此
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

        }
    }
}
类通知:片段(){
覆盖创建视图(充气机:布局充气机,容器:视图组?,
savedInstanceState:捆绑?:查看{
val视图=充气机。充气(R.layout.NOTIIAS,容器,false)为视图
val listView:listView=view?.findViewById(R.id.news\u list\u视图)
val btnSearch:Button=view?.findViewById(R.id.btnSearch)
val搜索:EditText=view?.findViewById(R.id.searchText)
val textSearch:String=search.text.toString()
变量名称:ArrayList=arrayListOf(
新闻对象(R.drawable.bioron,“aaaa”),
新闻对象(R.drawable.behind,“dddd”),
新闻对象(R.drawable.bioron,“aaaa”),
新闻对象(R.drawable.behind,“dddd”),
新闻对象(R.drawable.bioron,“aaaa”),
新闻对象(R.drawable.behind,“dddd”),
NewsObject(R.drawable.juv,“jjjjjj”)
)
listView.adapter=MyCustomAdapter(requireContext(),名称)
趣味搜索新闻(搜索:字符串):ArrayList{
val namesTemp:ArrayList=arrayListOf()
对于(名称中的i.count()-1到0){
Log.i(“sda”,名称[i]。标题)
if(名称[i].title.contains(search.trim())){
名称临时添加(名称[i])
}
}
返回namesTemp
}
btnSearch.setOnClickListener(){
if(textSearch.count()==0){
Toast.makeText(requireContext(),textSearch,Toast.LENGTH\u LONG.show())
listView.adapter=MyCustomAdapter(requireContext(),名称)
}否则{
Toast.makeText(requireContext(),“1”,Toast.LENGTH\u LONG.show())
listView.adapter=MyCustomAdapter(requireContext(),searchNews(textSearch))
}
}
返回视图
}
数据类NewsObject(val img:Int,val title:String)
公共类MyCustomAdapter(上下文:context,namesTemp:ArrayList):BaseAdapter(){
private val mContext:上下文
val名称:ArrayList=namesTemp
初始化{
mContext=上下文
}
重写fun getCount():Int{
返回name.size
}
覆盖getItemId(位置:Int):长{
返回位置。toLong()
}
覆盖趣味getItem(位置:Int):任意{
返回“测试字符串”
}
覆盖视图(位置:Int,转换视图:视图?,视图组:视图组?):视图{
val layoutInflater=layoutInflater.from(mContext)
val rowMain=layoutInflater.flate(R.layout.news_行,视图组,false)
val nameTextView=rowMain.findviewbyd(R.id.name\u textView)
nameTextView.text=names.get(position).title
/*val positionTextView=rowMain.findViewById(R.id.position\u textview)
positionTextView.text=names.get(position).img*/
val img=rowMain.findviewbyd(R.id.img\u新)
setImageResource(names.get(position.img)
返回行main
}
}
}

因为您在创建视图中有这个:

val textSearch:String=search.text.toString()
一旦创建了
EditText
,用户就可以从
EditText
中检索文本,然后才有机会实际输入任何文本。因此,它始终是默认值:在本例中为空字符串


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

或者如果片段启动时需要该信息,请将其移动到
onViewCreated()
,然后将创建视图,并在代码运行时填充视图runs@MatthewStrom大概用户需要一个输入文本的机会,这意味着
onViewCreated
无法工作。我怀疑他们试图检索的值在保存的实例状态下是否会始终可用(尽管如果是这样的话,您所描述的方法会起作用)。