我将对这一问题解释如下:我从首页点击搜索框进入搜索界面。搜索界面通过hide和show方法显示两个片段。当我第一次进入时,显示了标记界面。搜索特定内容时,标签界面隐藏,搜索详情界面通过show()显示。现在,问题是,当我快速进入搜索界面并立即返回,然后再次快速点击搜索框试图进入搜索界面时,搜索界面无法正常显示,主屏幕仍然显示,无法进行任何操作。只有将屏幕滑回,我才能正常操作。通过日志可以看到,搜索界面确实已经打开,但无法显示。我试图搜索相关问题,但没有解决问题。请帮帮我,谢谢。
这是我的代码。
class SearchActivity : BaseVmActivity<SearchViewModel>() {
companion object {
private const val HISTORY_FRAGMENT_TAG = "history_fragment"
private const val RESULT_FRAGMENT_TAG = "result_fragment"
fun instance(): SearchActivity {
return SearchActivity()
}
}
private lateinit var historyFragment: HistoryFragment
private lateinit var resultFragment: ResultFragment
override fun viewModelClass(): Class<SearchViewModel> = SearchViewModel::class.java
override fun getLayoutId(): Int = R.layout.activity_search
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
println("出事了")
if (savedInstanceState == null) {
historyFragment = HistoryFragment.instance()
resultFragment = ResultFragment.instance()
supportFragmentManager.beginTransaction()
.add(R.id.container, historyFragment, HISTORY_FRAGMENT_TAG)
.add(R.id.container, resultFragment, RESULT_FRAGMENT_TAG)
.show(historyFragment)
.hide(resultFragment)
.commit()
} else {
historyFragment = supportFragmentManager.findFragmentByTag(HISTORY_FRAGMENT_TAG) as HistoryFragment
resultFragment = supportFragmentManager.findFragmentByTag(RESULT_FRAGMENT_TAG) as ResultFragment
println("执行了吗")
}
imgBack.setOnClickListener {
if (resultFragment.isVisible) {
supportFragmentManager.beginTransaction()
.hide(resultFragment)
.commit()
} else {
println("触发了")
supportFragmentManager.beginTransaction().remove(historyFragment)
.remove(resultFragment).commit()
ActivityHelper.finish(SearchActivity::class.java)
}
}
imgSearch.setOnClickListener {
val text = etInput.text.toString().trim()
if (text.isNotEmpty()) {
resultFragment.doSearch(text)
supportFragmentManager.beginTransaction()
.show(resultFragment)
.commit()
it.hideSoftInput()
historyFragment.addHistory(text)
}
}
imgClear.setOnClickListener {
etInput.setText("")
}
etInput.run {
addTextChangedListener(
onTextChanged = { text, _, _, _ ->
imgClear.isGone = text.isNullOrEmpty()
}
)
setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
imgSearch.performClick()
true
} else false
}
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
supportFragmentManager.putFragment(outState, HISTORY_FRAGMENT_TAG, historyFragment)
supportFragmentManager.putFragment(outState, RESULT_FRAGMENT_TAG, resultFragment)
}
override fun initView() {
}
fun fillInputText(content: String) {
etInput.setText("")
etInput.setText(content)
etInput.setSelection(content.length)
}
override fun onBackPressed() {
imgBack.performClick()
}
override fun onPause() {
super.onPause()
LogUtil.d("onPause")
}
override fun onStop() {
super.onStop()
LogUtil.d("onStop")
}
override fun onDestroy() {
super.onDestroy()
LogUtil.d("onDestroy")
}
}
字符串
我想从首页进入搜索界面,返回首页,进入搜索界面。这个过程反复进行,始终是正常的
1条答案
按热度按时间gpnt7bae1#
你应该调试这个并观察错过的视图。找到的意见,将被摧毁的麻烦的情况下,为什么它的做法?根据我的经验,当你在Fragment中下载视图时,你应该检查
getContext()
/getApplicationContext
。它有助于检查,是你的片段渲染或用户关闭他.