如何在替换另一个片段时保留片段中的搜索菜单文本

问题描述

我有一个带有搜索菜单搜索侦听器的“片段A”。侦听器正在按预期方式工作。但是,我想要实现的是,当我离开此“片段A”并返回到该片段时,我想使用先前的搜索查询来扩展搜索菜单。当前,当我替换该片段时,将调用查询侦听器,并在onQueryTextChange方法中发送一个空字符串。

我所做的例子是

class MainFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
    ): View =  inflater.inflate(R.layout.main_fragment,container,false)


    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        setHasOptionsMenu(true)
        message.setonClickListener {
            parentFragmentManager.beginTransaction()
                .replace(R.id.container,BlankFragment()).addToBackStack(null)
                .commit()
        }
    }

    override fun onCreateOptionsMenu(menu: Menu,inflater: MenuInflater) {
        inflater.inflate(R.menu.search,menu)
        val searchItem = menu.findItem(R.id.action_search)
        val searchView = searchItem?.actionView as SearchView?

        searchView?.setonQueryTextListener(object : android.widget.SearchView.OnQueryTextListener,SearchView.OnQueryTextListener {
            override fun onQueryTextSubmit(query: String?): Boolean {
                query?.let { Log.d("zzz",it) }
                return false
            }

            override fun onQueryTextChange(newText: String?): Boolean {
                newText?.let { Log.d("zzzzz",it) }
                return false
            }

        })
        super.onCreateOptionsMenu(menu,inflater)
    }
}

是否有实现此目标的任何标准方法。预先感谢。

解决方法

可能您可以将查询保存到SharedPreferences,然后在片段中创建onResume方法。在onResume中时,请从SharedPreferences中加载字符串,而不是重新创建