如何在方向更改时处理onTouchEvent UP

时间:2014-01-08 15:16:09

标签: android android-activity

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

到目前为止,我唯一的问题是方向更改,具体情况如下:

  1. 用户触摸我的视图(手指放在我的视图上)
  2. 用户旋转设备(手指仍在我的视野中)
  3. 将识别MotionEvent.ACTION_UP,这是由方向更改和新活动的重新创建引起的(方向更改将重新创建轮换活动)
  4. 因为我在处理MotionEvent.ACTION_UP时调用了activity.finish(),所以会抛出IllegalStateException,因为旧的活动已经被销毁,而且我再次调用了finish()(处理MotionEvent时)。
  5. 知道如何处理这个问题。我曾尝试使用onDetachFromWindow,但这似乎是为了迟到。是否有我可以使用的另一种方法/回调。我想为我的视图创建一个小型库,因此我不想使用Activity.onDestroy(),因为我想避免调用我的视图方法,以通知活动已被破坏。

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

1 个答案:

答案 0 :(得分:-1)

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

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

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