android-fragments 在片段(Kotlin)中不工作,

omjgkv6w  于 2022-11-14  发布在  Android
关注(0)|答案(4)|浏览(190)

我提出的问题是关于事件onQueryTextListener的,我声明了它,因为它以前在java中使用它,但当我提交文本或更改文本时,它不显示日志。
这是我的代码片段:

片段_产品.kt

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    val vG = inflater!!.inflate(R.layout.fragment_producto, container, false)
    vG.recycler_producto.layoutManager = LinearLayoutManager(activity)
    vG.recycler_producto.hasFixedSize()
    vG.recycler_producto.adapter = Producto_Adapter(activity,this)

    vG.fab_scan.onClick {
        IntentIntegrator.forSupportFragment(this@Fragment_producto).initiateScan()
    }

    adapter = vG.recycler_producto.adapter as Producto_Adapter

    metodos.attachSwipeCheck(vG.recycler_producto)
    metodos.attachSwipeWrong(vG.recycler_producto)

    setHasOptionsMenu(true)
    return vG
}    

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    Log.i(TAG,"Llego a create optionsmenu")
    activity.menuInflater.inflate(R.menu.menu_producto,menu)
    /*val menuItem = menu.findItem(R.id.menu_search)
    val search = menuItem.actionView as SearchView
    searching(search)*/
    super.onCreateOptionsMenu(menu, inflater)
}

override fun onPrepareOptionsMenu(menu: Menu) {
    val menuItem = menu.findItem(R.id.menu_search)
    val search = menuItem.actionView as SearchView
    searching(search)
    super.onPrepareOptionsMenu(menu)
}

private fun searching(search: SearchView){
    search.onQueryTextListener {object: SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(query: String?): Boolean {
            Log.i(TAG,"Llego al querysubmit")
            return false
        }

        override fun onQueryTextChange(newText: String): Boolean {
            Log.i(TAG,"Llego al querytextchange")
            return true
        }
    }}
}

请帮帮我。
谢谢

ncgqoxb0

ncgqoxb01#

请尝试将searching方法更改为:

private fun searching(search: SearchView) {
    search.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(query: String?): Boolean {
            Log.i(TAG,"Llego al querysubmit")
            return false
        }

        override fun onQueryTextChange(newText: String): Boolean {
            Log.i(TAG,"Llego al querytextchange")
            return true
        }
    })
}

我还没有测试过,但是你的括号看起来不太可靠。我认为应该有()而不是{}
您使用的onQueryTextListener方法(与我上面代码中的setOnQueryTextListener相比)无法为我编译。您是否使用了任何扩展方法?可能该方法将函数String->()作为参数,因此当您将OnQueryTextListener放入{}时,您只是将lambda作为参数提供给该方法,该方法将创建一个对象,但不会使用该对象。

3mpgtkmj

3mpgtkmj2#

我还必须实现侦听器,以便正确编译:

searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener,
        android.widget.SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(query: String?): Boolean {
            //
            return false
        }
        override fun onQueryTextChange(newText: String?): Boolean {
            //
            return false
        }
    })
1l5u6lss

1l5u6lss3#

嗨,我有同样的问题,我的onQueryTextChange没有被触发...经过一些搜索,我发现我使用的是androidx,所以我必须改变我的菜单从:app:actionViewClass="android.widget.SearchView"app:actionViewClass="androidx.appcompat.widget.SearchView"还要确保在您的Activity或片段中导入正确的SearchView:import androidx.appcompat.widget.SearchView,而不是安卓小工具。
最后,如果你想添加Focus监听器,要知道searchview什么时候在使用或者不这样做:

searchView.setOnQueryTextFocusChangeListener ( object : View.OnFocusChangeListener{
                override fun onFocusChange(p0: View?, p1: Boolean) {
                    println("focus cahanged")
                    println(p1)
                }

            })

如果搜索视图处于焦点,则返回true,否则返回false。

mwyxok5s

mwyxok5s4#

检查您的xml代码;
如果您使用的是androidx.appcompat.widget.SearchView,则应使用该对象

setOnQueryTextListener(object : androidx.appcompat.widget.SearchView.OnQueryTextListener {
                    override fun onQueryTextSubmit(query: String?): Boolean {
                        return false
                    }

                    override fun onQueryTextChange(newText: String): Boolean {
                        return true
                    }
                })

或将searchView更改为标准视图。

相关问题