切换xml布局会导致Android崩溃

时间:2012-08-08 17:49:46

标签: android android-layout

我需要像书一样编写一个Android应用程序。我有大约100张图像,我需要用后退,前进和其他按钮显示它们。 我尝试为每个图像创建一个xml-layout,并将图像设置为布局的背景。

在运行应用程序时,如果我快速按下按钮,程序在切换xml-layout期间崩溃。如果我减少图像大小,我的问题也会减少。不幸的是,我需要另一种解决方案来解决它,因为我不能使用较小的图像尺寸,但我仍然有崩溃问题。

2 个答案:

答案 0 :(得分:1)

有一个布局,其中包含ImageView。然后,只要您需要循环到下一张或上一张图像,就可以不断更改图像视图的源图像。

答案 1 :(得分:0)

部分问题是单击UI按钮会立即返回/队列点击,即使与该点击相关联的操作尚未完成。出于超出此响应范围的原因,值得注意的是,只需在执行工作时停用按钮即可。是无效的。这种问题有几种解决方案:一种是使用布尔标志,只有在基础" work"之后才能设置它。已经完成了。然后在按钮操作处理程序中,忽略在重置标志之前发生的按钮单击:

   /**
    * Button presses are ignored unless idle.
    */
   private void onMyButtonClicked() {
      if(idle) {
         doWork();
      }
   }

   /**
    * Does some work and then restores idle state when finished.
    */
   private void doWork() {
      idle = false;
      // maybe you spin off a worker thread or something else.
      // the important thing is that either in that thread's run() or maybe just in the body of
      // this doWork() method, you:
      idle = true;
   } 

另一个通用选项是使用时间过滤;即。你设置一个限制,其中按下按钮的最大频率是1hz:

/**
    * Determines whether or not a button press should be acted upon.  Note that this method
    * can be used within any interactive widget's onAction method, not just buttons.  This kind of
    * filtering is necessary due to the way that Android caches button clicks before processing them.
    * See http://code.google.com/p/android/issues/detail?id=20073
    * @param timestamp timestamp of the button press in question
    * @return True if the timing of this button press falls within the specified threshold
    */
   public static synchronized boolean validateButtonPress(long timestamp) {
      long delta = timestamp - lastButtonPress;
      lastButtonPress = timestamp;
      return delta > BUTTON_PRESS_THRESHOLD_MS;
   }

然后你做这样的事情:

private void onMyButtonClicked() {      
      if(validateButtonPress(System.currentTimeMillis())) {
         doWork();
      }
   }

这最后一个解决方案无疑是不确定的,但如果您认为用户几乎从未在移动设备上有意点击按钮超过1-2次,那就不那么糟糕了。