gpt4 book ai didi

android - 带有 fragment 的 SearchView

转载 作者:行者123 更新时间:2023-11-29 01:05:02 26 4
gpt4 key购买 nike

我有一个 Activity 应用程序,我在顶部栏上放置了一个 SearchView。我很挣扎,因为有成千上万的在线搜索手册/教程,但它们似乎都以某种方式过时了。即使是官方文档也没有说清楚。

出于某种原因,我必须在我的应用程序中使用单个 Activity,并处理与 Fragment 的整个交互。

我正在努力研究如何使 SearchView 表现得像我想要的那样:我希望菜单项在我单击它时在顶部显示搜索栏,然后提供历史记录和建议,然后每当搜索某些内容时,打开一个包含结果的不同 Fragment(实际上,一个具有三种不同结果类型的 TabLayout)——我认为 Youtube 就是这样。

我已经到了这样的地步,即搜索某些内容会将另一个 Fragment 带到屏幕上,但是我希望当用户点击后退箭头时,用户会被带回上一个 Fragment(无需重新加载信息 - 无休止的滚动,因此用户可能加载了大量数据):每当我单击时,首先搜索的操作 View 消失,然后如果我再次点击,之前的 Fragment 出现了,但它正在重新加载其内容。

这是我的setupSearch() 方法:

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 = this@DashboardListActivity.resources.displayMetrics.widthPixels
searchEditText.dropDownWidth = screenWidthPixel
}
}

searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
var searchSuggestion = SearchRecentSuggestions(this@DashboardListActivity, 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 以某种方式暂停和恢复(我猜是因为它是作为 dialog 实现的?)。这不是问题,但我始终将视频窗口置于所有 View 之上(因此我需要使用 Fragment 完成所有操作)并且视频会停止几秒钟然后继续。有没有可能避免这种情况?

搜索似乎是一项简单的任务,但它正在变成一场噩梦。官方文档说我必须创建一个“可搜索”的不同 Activity,但我不能那样做。

最佳答案

如果您不想在返回时重新加载 fragment (包含搜索),则必须将替换 fragment 更改为添加。这是因为 replace 会先删除(任何 fragment ),然后再添加(新 fragment )。

关于android - 带有 fragment 的 SearchView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47888397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com