Изчистване на текста на Searchview в навигацията.

Имам дейност с два дъщерни фрагмента Timeline и Milestones. И двата фрагмента съдържат списъчни изгледи, попълнени от персонализиран адаптер за курсор

Ето едно графично представяне: въведете описание на изображението тук

Сега, когато съм на TIMELINE и отворя изгледа за търсене, пиша нещо, всичко е наред, получавам желания резултат. Но когато навигирам от времева скала към етапи с some text in the searchview, изгледът за търсене не се изчиства, така че получавам филтрирани резултати и на страницата с етапи и в съответствие с параметрите, които предоставих във времевата скала.

Използвам AppCompact lib, за да разработя своя ActionBar. Разделите там не са раздели ActionBar, а прости SlidingTabLayout.

Досега се опитах да използвам

getActivity().supportInvalidateOptionsMenu(); в onResume() и на двата фрагмента, не работи.

Опитах searchView.setQuery("",false) - не работи и на случаен принцип ми дава NPE.

И така, какво пропускам тук?


person Skynet    schedule 14.04.2015    source източник
comment
Трябва да погледнете това решение: stackoverflow.com/questions/29144841/ Надяваме се, че помага!   -  person Sohil R. Memon    schedule 14.04.2015
comment
Благодаря Sohil, ще погледна там :)   -  person Skynet    schedule 14.04.2015


Отговори (1)


Можете да погледнете моя пример, където показах как да контролирате searchView между фрагментите.

Първо. Трябва да създадете BaseFragment, който работи с контекста на дейност с appBarLayout.

open class BaseFragment: Fragment() {
    lateinit var rootActivity: MainActivity
    lateinit var appBarLayout: AppBarLayout
    lateinit var searchView: androidx.appcompat.widget.SearchView

    override fun onAttach(context: Context) {
        super.onAttach(context)

        this.rootActivity = context as MainActivity
        appBarLayout = rootActivity.findViewById(R.id.app_bar_layout)
        searchView = rootActivity.findViewById(R.id.search_input)
    }

    override fun onResume() {
        super.onResume()

        resetAppBarLayout()
    }

    private fun resetAppBarLayout() {
        appBarLayout.elevation = 14f
    }

    fun setupSearch(query: String) {
        searchView.visibility = View.VISIBLE
        searchView.clearFocus()
        when(query.isNotEmpty()) {
            true -> {
                searchView.setQuery(query, true)
                searchView.isIconified = false
            }
            false -> {
                searchView.isIconified = true
                searchView.isIconified = true
            }
        }
    }

    fun hideSearchKeyboard() {
        context?.let {
            KeyboardHelper.hideSearchKeyboard(it, searchView.findViewById(R.id.search_src_text))
        }
    }

    fun hideSearch() {
        searchView.visibility = View.GONE
        searchView.clearFocus()
    }
}

Второ. Наследете вашите фрагменти от BaseFragment, заменете метода onResume() и контролирайте searchView във вашите фрагменти, като извикате методи от BaseFragment. Нещо като това.

class FragmentA : BaseFragment() {
    private var searchQuery = ""

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val root = inflater.inflate(R.layout.fragment, container, false)
        val textView: TextView = root.findViewById(R.id.textView)
        textView.text = "Fragment A"
        return root
    }

    override fun onResume() {
        super.onResume()

        setupSearch()
    }

    private fun setupSearch() {
        searchView.setOnQueryTextListener(object : androidx.appcompat.widget.SearchView.OnQueryTextListener {
            override fun onQueryTextChange(newText: String?): Boolean {
                when(newText.isNullOrEmpty()) {
                    true -> searchQuery = ""
                    false -> searchQuery = newText
                }
                return true
            }

            override fun onQueryTextSubmit(query: String?): Boolean {
                hideSearchKeyboard()
                return true
            }
        })

        super.setupSearch(searchQuery)
    }
}

Пълен пример можете да намерите тук https://github.com/yellow-cap/android-manage-searchview

person Artem Chernousov    schedule 19.08.2020