2010-03-21 78 views
0

在我的活动中,我通过用新的视图(setContentView())替换当前视图来响应onClick()。出于某种原因,当我这样做,然后回到原始视图时,最初按下的按钮仍然看起来像被按下。为什么我的按钮保持按下状态?

如果您以某种方式“刷新”它(例如使用轨迹球滚动它),然后它将恢复到未按下的状态。就好像这个按钮没有得到“修补”事件。

奇怪的是:这只发生在我的T-Mobile Pulse(android 1.5)上。它不会在模拟器上发生。

我试着在视图上调用invalidate()/ postInvalidate(),但是它没有任何效果。

+0

试图重新绘制按钮? – Behrooz 2010-03-21 16:42:27

回答

3

我的猜测是你的“修饰”事件会转到你的新内容视图。

您可以:

  • 不叫setContentView()onClick()所有,使用实现自己的UI目标(多项活动,ViewFlipper等)的其他手段。
  • 不叫setContentView()立即onClick(),而是post()一个Runnable,将调用setContentView()。这应该在“修改”事件之后将内容视图替换置于事件队列中。

就我个人而言,我不是一直在呼吁setContentView()的活动的大爱好者,因为我担心内存泄漏和过度丰富的活动使状态和内存管理更加困难。例如,假设您将原始布局(A)称为setContentView(),然后致电setContentView()以获得新布局(B),然后用户旋转屏幕。 Android的默认onSaveInstanceState()将帮助你与B - 挂在EditText的内容等 - 但对于A,你是你自己的。

+0

啊,我不知道ViewFlipper(或ViewSwitcher!)看起来像我想要的。未来读者的示例:http://www.ctctlabs.com/index.php/blog/detail/android_dont_overlook_viewswitcher/ – Timmmm 2010-03-22 12:09:44

1

onClick()这样的声音在按钮的View恢复为未点击状态之前执行,并且在此之前移除视图,它会保持其点击状态。在onClick()期间,您可以尝试使用另一个项目请求焦点。但是,在屏幕上反复调用setContentView()听起来有点奇怪。你确定你不应该使用另一个Activity?这将解决你的按钮状态问题。