为什么我的按钮保持按下状态?

时间:2010-03-21 16:38:58

标签: android graphics button state

在我的活动中,我通过用新的替换当前视图(setContentView())来响应onClick()。由于某种原因,当我这样做,然后回到原始视图后,我最初按下的按钮看起来仍然是按下它。

如果你以某种方式“刷新”它(例如用轨迹球滚动它),那么它将恢复到未按下状态。就像按钮没有得到“修饰”事件一样。

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

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

2 个答案:

答案 0 :(得分:3)

我的猜测是,您的“修饰”活动将转到您的新内容视图。

你可以:

  • 不要在setContentView()中使用其他方式调用onClick(),使用其他方式实现您的用户界面目标(多项活动,ViewFlipper等)。
  • 不要在setContentView()中立即致电onClick() ,而应post() RunnablesetContentView()。这应该在“修饰”事件之后将内容视图替换为事件队列。

就个人而言,我并不是不断调用setContentView()的活动的忠实粉丝,因为我担心内存泄漏和过度丰满的活动会使状态和内存管理变得更加困难。例如,假设您为原始布局调用setContentView()(A),然后为新布局调用setContentView()(B),然后用户旋转屏幕。 Android的默认onSaveInstanceState()会帮助您使用B - 挂在EditText内容等等 - 但对于A,您可以自行使用。

答案 1 :(得分:1)

在按钮的View被设置回未被取消状态之前执行onClick()之类的声音,并且在此之前删除视图,它会保持其单击状态。您可以在onClick()期间尝试使用其他项目请求焦点。但是,在屏幕上反复呼叫setContentView()听起来有点奇怪。您确定不应该使用其他Activity吗?这将解决您的按钮状态问题。