【问题标题】:Android: setOnLongClickListener() is unreliableAndroid:setOnLongClickListener() 不可靠
【发布时间】:2013-06-25 23:18:53
【问题描述】:

我使用setOnLongClickListener() 添加了一个长按监听器。一般情况下,长按监听器会按预期调用。但是,有时长单击似乎被中止(视图突出显示,但即​​使它仍然被按下,也会取消突出显示)。这似乎发生在视图层次结构的其他部分(进度条、计数器、动画等)正在更新时。

是否有任何已知的特定内容会中断或中止长点击周期?

【问题讨论】:

  • 我想你说的,UI线程是单线程的,一次只能做一件事,如果可以处理你的长点击或处理更新其他视图,做不到两者。

标签: android android-layout android-listview android-view android-ui


【解决方案1】:

这似乎是由可变宽度TextView (android:layout_width="wrap_content") 引起的。在用户开始长按之后,但在长按持续时间过去之前,显示的文本偶尔会发生变化,从而阻止调用侦听器。标签宽度的变化会触发布局通道,从而使长按无效。

我们能够通过确保视图在文本更改时保持固定宽度来解决此问题。

【讨论】:

    【解决方案2】:

    您可以在新的可运行文件中更新您的 UI

    最终可运行可运行=新可运行(){ 公共无效运行() { updateYourUIHere(); } };

    你的 onLongClickListener 也不会崩溃

    【讨论】:

    • 不是只能在UIThread中更新Android中的UI吗?大多数情况下,我的做法与您的建议相反:我在另一个线程中并想显示 Toast,那么我必须使用 runOnUIThread(new Runnable(){ @Override public void run(){ // Display toast or update UI } }); 并且由于 UIThread 仍然是像 @LuckyMe 所述的单个线程,无法同时处理 LongClick 和显示/更新动画。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多