Ich habe eine einzige Activity
App, wo ich eine SearchView
auf der Topbar gesetzt. Ich kämpfe, da es Tausende von Handbüchern/Tutorials zur Implementierung der Online-Suche gibt, aber alle scheinen irgendwie veraltet zu sein. Selbst die offizielle Dokumentation macht es mir nicht klar.SearchView mit Fragmenten
Aus irgendeinem Grund muss ich ein einzelnes Activity
in meiner App verwenden und die gesamte Interaktion mit Fragment
handhaben.
Ich kämpfe auf, wie man das SearchView
Verhalten wie ich möchte: Ich will den Menüpunkt, um die Suchleiste an der Spitze, wenn ich klicken, dann bieten Geschichte und Vorschläge, dann, wenn etwas gesucht wird, zu öffnen eine andere Fragment
mit den Ergebnissen (eigentlich eine TabLayout
mit drei verschiedenen Ergebnisarten) - so denke ich Youtube.
Ich kam zu dem Punkt, wo die Suche nach etwas anderen Fragment
auf den Bildschirm bringt, aber dann, dass ich will, wenn der Benutzer auf dem Zurück-Pfeil klickt, wird der Benutzer zurück zum vorherigen Fragment
gebracht (ohne es wieder neu zu laden die Info - es gibt endloses Scrollen, so dass der Benutzer möglicherweise Tonnen von Daten geladen hat): Immer wenn ich klicke, verschwindet zuerst die Aktionsansicht für die Suche, wenn ich dann zurück drücke, wird der vorherige Fragment
angezeigt, aber es lädt seinen Inhalt neu.
das ist mein setupSearch() Methode: (? Ich denke, weil es als dialog
implementiert ist)
private fun setupSearch(menu: Menu) {
// Get the SearchView and set the searchable configuration
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
val searchItem = menu.findItem(R.id.app_search)
val searchView = searchItem.actionView as SearchView
// Assumes current activity is the searchable activity
searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName))
var searchEditTextId = R.id.search_src_text;
var searchEditText = searchView.findViewById<AutoCompleteTextView>(searchEditTextId)
var dropDownAnchor = searchView.findViewById<View>(searchEditText.dropDownAnchor)
if (dropDownAnchor != null) {
dropDownAnchor.addOnLayoutChangeListener { p0, p1, p2, p3, p4, p5, p6, p7, p8 ->
// screen width
var screenWidthPixel = [email protected]
searchEditText.dropDownWidth = screenWidthPixel
}
}
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
var searchSuggestion = SearchRecentSuggestions([email protected], SearchHistoryProvider.AUTHORITY, SearchHistoryProvider.MODE)
searchSuggestion.saveRecentQuery(query, null)
supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, SearchResultsContainerFragment.newInstance())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack("SEARCH")
.commit()
return false
}
override fun onQueryTextChange(newText: String): Boolean {
return false
}
})
searchItem.setOnActionExpandListener(object : MenuItem.OnActionExpandListener{
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
return true
}
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
return true
}
})
searchView.setOnSuggestionListener(object: SearchView.OnSuggestionListener {
override fun onSuggestionSelect(position: Int): Boolean {
return false
}
override fun onSuggestionClick(position: Int): Boolean {
return false
}
})
}
Auch wenn die Vorschlagsliste angezeigt wird, scheint es die Activity
irgendwie angehalten und wieder aufgenommen . Das wäre kein Problem, aber ich halte ein Videofenster immer oben auf allen Ansichten (daher muss ich alles mit Fragment
machen) und das Video stoppt für eine Sekunde und geht dann weiter. Kann das verhindert werden?
Die Suche schien wie eine einfache Aufgabe, aber es wurde zu einem Albtraum. Die offizielle Dokumentation sagt, dass ich eine andere Activity
erstellen muss, die "durchsuchbar" ist, aber ich kann das nicht tun.
Das ist kein großes Problem. Sie müssen nur prüfen, welches Fragment gerade sichtbar ist, und diesen 'QueryText' in dieses Fragment senden und Ihre Liste dieses sichtbaren Fragments filtern. –
scheint es mehrere Probleme zu geben, könnte die wichtigste isolieren? – Remario