私はSearchView
をトップバーに置いたActivity
という単一のアプリケーションを持っています。オンラインで検索を実装するためのマニュアルやチュートリアルが何千もあるようなので、私は苦労していますが、それらのすべては何とか古くなっているようです。公式の文書でさえ私には明らかではありません。フラグメントのあるSearchView
私のアプリではActivity
を1つ使用し、対話全体をFragment
で処理する必要があります。
SearchView
は、次のように動作するように苦労しています。メニューバーをクリックしてトップに表示し、ヒストリーや提案を提示してから、何か検索する異なるFragment
の結果(実際には、結果の種類が異なるTabLayout
) - これはYoutubeの考え方です。
何かを検索すると画面に別のFragment
が表示されますが、ユーザーが戻る矢印をクリックすると、前回のFragment
に戻ることができます情報が無限にスクロールされているので、ユーザーが多数のデータを読み込んでいる可能性があります):をクリックすると、最初に検索のアクションビューが消えて、再びヒットすると、前のFragment
が表示されます。
これは私のsetupSearch()方法であって、(?それはdialog
として実装されているので、私は推測する)候補リストを表示する際に
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
}
})
}
また、Activity
が何らかの形で一時停止し、再開されたようです。これは問題ではありませんが、私は常にすべてのビューの上にビデオウィンドウを保持しています(したがって、Fragment
ですべてを行う必要があります)。それを防ぐことは可能ですか?
検索は簡単な仕事のように思えますが、その悪夢のようになりました。公式の文書によると、 "Searchable"という別のActivity
を作成する必要がありますが、私はそれを行うことはできません。
大きな問題はないこと。現在表示されているフラグメントを確認し、そのフラグメントにその 'QueryText'を送り、その可視フラグメントのリストをフィルタリングするだけです。 –
複数の問題があるように見えますが、主要なものを分離できますか? – Remario