6.7.0 - Alpha21 - 修复代码编辑器切换工具栏后按钮状态可能不同步的问题
This commit is contained in:
@@ -1217,13 +1217,16 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag
|
|||||||
|
|
||||||
private fun setMenuItemStatus(id: Int, enabled: Boolean) {
|
private fun setMenuItemStatus(id: Int, enabled: Boolean) {
|
||||||
mMenuItemStatus.put(id, enabled)
|
mMenuItemStatus.put(id, enabled)
|
||||||
|
|
||||||
|
// Always update the normal toolbar cache as well, so switching toolbars won't lose state.
|
||||||
|
// zh-CN: 同时更新普通工具栏的缓存, 避免切换工具栏后状态丢失.
|
||||||
|
mNormalToolbar.setMenuItemStatus(id, enabled)
|
||||||
|
|
||||||
|
// Also update current visible toolbar fragment if exists.
|
||||||
|
// zh-CN: 若当前存在正在显示的工具栏 Fragment, 也同步更新它.
|
||||||
val supportManager = activity.supportFragmentManager
|
val supportManager = activity.supportFragmentManager
|
||||||
val fragment = supportManager.findFragmentById(R.id.toolbar_menu) as ToolbarFragment<*>?
|
val fragment = supportManager.findFragmentById(R.id.toolbar_menu) as ToolbarFragment<*>?
|
||||||
if (fragment == null) {
|
fragment?.setMenuItemStatus(id, enabled)
|
||||||
mNormalToolbar.setMenuItemStatus(id, enabled)
|
|
||||||
} else {
|
|
||||||
fragment.setMenuItemStatus(id, enabled)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getMenuItemStatus(id: Int, defValue: Boolean): Boolean {
|
fun getMenuItemStatus(id: Int, defValue: Boolean): Boolean {
|
||||||
@@ -1231,6 +1234,17 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun initNormalToolbar() {
|
private fun initNormalToolbar() {
|
||||||
|
val fm = activity.supportFragmentManager
|
||||||
|
val existing = fm.findFragmentById(R.id.toolbar_menu)
|
||||||
|
|
||||||
|
// Always (re)bind listeners for both the cached normal toolbar and any restored fragment.
|
||||||
|
// This fixes the case where FragmentManager restores a ToolbarFragment instance after
|
||||||
|
// Activity recreation, but its listener fields are lost (null), causing "click does nothing".
|
||||||
|
//
|
||||||
|
// zh-CN:
|
||||||
|
// 总是为普通工具栏缓存对象与任何已恢复的 Fragment 重新绑定监听器.
|
||||||
|
// 这可以修复 Activity 重建后 FragmentManager 恢复出的 ToolbarFragment 实例其监听字段丢失 (null),
|
||||||
|
// 从而出现 "点击无反应" 的问题.
|
||||||
mNormalToolbar.apply {
|
mNormalToolbar.apply {
|
||||||
setOnMenuItemClickListener(this@EditorView)
|
setOnMenuItemClickListener(this@EditorView)
|
||||||
setOnMenuItemLongClickListener { id ->
|
setOnMenuItemLongClickListener { id ->
|
||||||
@@ -1240,7 +1254,24 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
activity.supportFragmentManager.findFragmentById(R.id.toolbar_menu) ?: showNormalToolbar()
|
|
||||||
|
(existing as? ToolbarFragment<*>)?.apply {
|
||||||
|
setOnMenuItemClickListener(this@EditorView)
|
||||||
|
setOnMenuItemLongClickListener { id ->
|
||||||
|
when (id) {
|
||||||
|
R.id.run if !mReadOnly -> true.also { debug() }
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sync menu state after rebinding to avoid stale enabled flags.
|
||||||
|
// zh-CN: 重新绑定后同步一次菜单状态, 避免 enabled 标记过期.
|
||||||
|
post { syncPrimaryMenuState() }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (existing == null) {
|
||||||
|
showNormalToolbar()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUpFunctionsKeyboard() {
|
private fun setUpFunctionsKeyboard() {
|
||||||
@@ -1933,6 +1964,7 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag
|
|||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe(Observers.emptyConsumer()) { e: Throwable ->
|
.subscribe(Observers.emptyConsumer()) { e: Throwable ->
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
|
showSnack(this, e.message, true)
|
||||||
showToast(context, e.message, true)
|
showToast(context, e.message, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1945,6 +1977,10 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag
|
|||||||
activity.supportFragmentManager.beginTransaction()
|
activity.supportFragmentManager.beginTransaction()
|
||||||
.replace(R.id.toolbar_menu, mNormalToolbar)
|
.replace(R.id.toolbar_menu, mNormalToolbar)
|
||||||
.commitAllowingStateLoss()
|
.commitAllowingStateLoss()
|
||||||
|
|
||||||
|
// Sync menu state after toolbar switch to avoid stale enabled flags.
|
||||||
|
// zh-CN: 切换工具栏后同步一次菜单状态, 避免 enabled 标记过期.
|
||||||
|
post { syncPrimaryMenuState() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun replace() {
|
fun replace() {
|
||||||
@@ -2344,6 +2380,10 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag
|
|||||||
arguments!!.putBoolean(SearchToolbarFragment.ARGUMENT_SHOW_REPLACE_ITEM, showReplaceItem)
|
arguments!!.putBoolean(SearchToolbarFragment.ARGUMENT_SHOW_REPLACE_ITEM, showReplaceItem)
|
||||||
})
|
})
|
||||||
.commit()
|
.commit()
|
||||||
|
|
||||||
|
// Sync menu state after toolbar switch to avoid stale enabled flags.
|
||||||
|
// zh-CN: 切换工具栏后同步一次菜单状态, 避免 enabled 标记过期.
|
||||||
|
post { syncPrimaryMenuState() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(CheckedPatternSyntaxException::class)
|
@Throws(CheckedPatternSyntaxException::class)
|
||||||
@@ -2360,6 +2400,10 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag
|
|||||||
mInputMethodEnhanceBar.visibility = GONE
|
mInputMethodEnhanceBar.visibility = GONE
|
||||||
}
|
}
|
||||||
mDebugging = true
|
mDebugging = true
|
||||||
|
|
||||||
|
// Sync menu state after toolbar switch to avoid stale enabled flags.
|
||||||
|
// zh-CN: 切换工具栏后同步一次菜单状态, 避免 enabled 标记过期.
|
||||||
|
post { syncPrimaryMenuState() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun exitDebugging() {
|
fun exitDebugging() {
|
||||||
@@ -2375,6 +2419,10 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag
|
|||||||
mInputMethodEnhanceBar.visibility = VISIBLE
|
mInputMethodEnhanceBar.visibility = VISIBLE
|
||||||
}
|
}
|
||||||
mDebugging = false
|
mDebugging = false
|
||||||
|
|
||||||
|
// Sync menu state after toolbar switch to avoid stale enabled flags.
|
||||||
|
// zh-CN: 切换工具栏后同步一次菜单状态, 避免 enabled 标记过期.
|
||||||
|
post { syncPrimaryMenuState() }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showErrorMessage(msg: String) {
|
private fun showErrorMessage(msg: String) {
|
||||||
|
|||||||
Reference in New Issue
Block a user