【问题标题】:How to handle onTouchEvent UP on orientation change如何在方向更改时处理 onTouchEvent UP
【发布时间】:2014-01-08 15:16:08
【问题描述】:

我已经实现了一个从 ViewGroup 扩展的自定义 View 组件。我已经重写了 onTouchEvent 方法来监听 MotionEvent 事件。我基本上要做的是,如果用户用手指(MotionEvent.ACTION_UP)触摸并释放我的自定义视图,则包含我的视图的活动将完成。我的自定义视图引用了活动。

到目前为止一切顺利,我唯一遇到的问题是方向变化,情况如下:

  1. 用户触摸我的视图(手指放在我的视图上)
  2. 用户旋转设备(手指仍在我的视野中)
  3. MotionEvent.ACTION_UP 将被识别,这是由方向更改和新 Activity 的重新创建引起的(方向更改将重新创建旋转的 Activity)
  4. 由于我在处理 MotionEvent.ACTION_UP 时调用了 activity.finish(),因此将抛出 IllegalStateException,因为旧的活动已经被销毁,然后我再次调用了 finish()(在处理 MotionEvent 时)。

知道如何处理这个问题。我曾尝试使用onDetachFromWindow,但这似乎为时已晚。我可以使用另一种方法/回调吗?我想为我的视图创建一个小型库,因此我不想使用Activity.onDestroy(),因为我想避免调用我的视图的方法,以通知活动已被破坏。

从 API 级别 17 开始,有一个方法 Activity.isDestroyed()。这将是解决我的问题的解决方案,但我也必须支持旧版本(回到 Android 8)。 Activity.isFinishing() 可以工作,但我想介绍更一般的活动被破坏的情况(因为我的库的用户可以实现自己的 ACTION_UP 回调,他可以调用Activity.onBackPressed() 而不是调用Activity.finished()。有什么建议吗?

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    在您的清单中,您可以像这样设置您的活动:

    <activity android:name=".MyActivity" 
                  android:configChanges="orientation"/>
    

    这告诉 Android 您将自己处理旋转更改,并且不会破坏您的活动。如果你真的需要在触摸时处理旋转,我没有答案:(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多