나는 SearchView
을 상단 바에 넣은 하나의 Activity
앱을 가지고 있습니다. 온라인 검색을 구현하는 데 필요한 수천 개의 매뉴얼/튜토리얼이 있기 때문에 고민 중입니다. 그러나 그 중 일부는 구식 인 것으로 보입니다. 공식 문서조차도 저에게 분명하지 않습니다.파편이있는 SearchView
이유 중 하나는 내 응용 프로그램에서 하나의 Activity
을 사용하고 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
으로 모든 작업을 수행해야 할 필요가 있음) 비디오가 분할 초 동안 계속 중지됩니다. 그것을 막을 수 있습니까?
검색은 쉬운 일처럼 보였지만 악몽이되었습니다. 공식 문서에서는 "검색 가능"인 다른 Activity
을 만들어야하지만 그렇게 할 수 없다고 말합니다.
아니에요. 현재 보이는 조각을 확인하고 해당 조각에'QueryText'를 보내고 그 조각의 목록을 필터링하면됩니다. –
여러 문제가있는 것 같아요, 주요 문제를 격리 할 수 있습니까? – Remario