【问题标题】:how to detect if actionmode already present如何检测动作模式是否已经存在
【发布时间】:2012-09-24 12:00:24
【问题描述】:

我在一个视图中有几个小部件,每个小部件都需要自己的 ActionMode。我看到当用户在操作栏外点击时,ActionMode 不会自动关闭。因此,用户很容易为一个控件启动一个 ActionMode,然后点击(在我的情况下长按)另一个控件并在第一个控件的顶部堆叠第二个 ActionBar。这会导致编程逻辑混乱。

我可以使用活动级别的成员变量来跟踪当前的 ActionMode,如果需要新的,我可以关闭当前的。但是,这使我的代码阅读和维护变得混乱。此外,当用户点击操作栏外的任何内容时,我更愿意立即关闭它。

关于处理这个问题的好方法有什么建议吗?

【问题讨论】:

    标签: android android-actionbar dismiss


    【解决方案1】:

    前段时间我一直在寻找这个问题的解决方案,据我所知,如果不将当前动作模式状态保存在全局变量中,您将无法跟踪它。但是我不认为一个具有正确名称的变量会使您的代码混乱。

    【讨论】:

    • 好的,但除了混乱之外,假设用户单击了您尚未子类化的 EditText。你如何关闭现在不合适的操作栏?
    • 好吧,如果我没听错的话……我是这样写的:实现全局变量ActionMode mMode;,在onCreateActionMode(...)方法中填充当前动作模式,然后调用@987654323 @当我需要退出当前动作模式时
    • 好吧,我明白了。但是你怎么知道什么时候调用finish()?也就是说,用户可以点击的地方很多;您是否对每个对象进行子类化并检查 MotionEvent.ACTION_DOWN 然后调用finish()?那将很容易出错,这些代码会被到处乱扔。
    • 视情况而定,例如您可以在控件元素下的主布局中添加透明视图match_parent,match_parent,并仅处理用户对其的点击
    • 听起来不错。如果我理解正确,这仍然有点棘手:透明视图需要检查点击的位置,并以某种方式知道它是否超过了启动操作模式的小部件;如果没有,那么它“完成”动作模式。我会将您的答案标记为正确,因为这听起来不错,而且我预感没有更好的方法。
    猜你喜欢
    • 2023-01-25
    • 1970-01-01
    • 2022-08-16
    • 2021-10-03
    • 2011-11-03
    • 2019-08-21
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多