2014-01-08 17 views
0

我已经实现了一个自ViewGroup扩展的自定义View组件。我已经覆盖了用于侦听MotionEvent事件的onTouchEvent方法。我基本上会做的是,如果用户用他的手指(MotionEvent.ACTION_UP)创建并释放我的自定义视图,则包含我的视图的活动将完成。我的自定义视图具有对该活动的引用。如何在方向变化时处理onTouchEvent UP

到目前为止好,我唯一的问题是方向的变化,有以下情形:

  1. 用户触摸我认为(在我看来手指)
  2. 用户旋转设备(手指还在我的看法)
  3. 一个MotionEvent.ACTION_UP会被认可,引起取向的变化和新的活动(朝向的变化休闲会重新建立一个旋转的活动)
  4. 因为我叫activity.finish()在处理一个MotionEvent.ACTION_UP将抛出一个IllegalStateException,因为旧的活动已经被销毁,而且我再次调用finish()(处理MotionEvent时)。

任何想法如何处理这个问题。我试图使用onDetachFromWindow,但似乎要迟到了。是否有另一种方法/回调,我可以使用。我想为我的观点创建一个小型图书馆,因此我不想使用Activity.onDestroy(),因为我想避免调用我的观点的方法,以通知活动已被破坏。

由于API级别17有一个方法Activity.isDestroyed()。这将是解决我的问题的解决方案,但我也必须支持旧版本(回到Android 8)。 Activity.isFinishing()会的工作,但我想已经覆盖活动时已被破坏(因为我的媒体库的用户可以实现自己的ACTION_UP回调,在那里他可以打电话Activity.onBackPressed(),而不是调用Activity.finished()的更普遍的情况。有什么建议?

回答

-1

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

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

这告诉Android的你会把手旋转而改变自己,它不会破坏你的活动。如果你真的需要处理旋转在触摸我。没有答案:(