1

画像の任意の場所をタッチすると、1000 ミリ秒間ポップアップが表示されるゲームを作成しています。しかし、これが問題でした。アクティビティを閉じるとクラッシュするため、アクティビティを閉じるための時間ハンドラを追加しました。しかし、それは別の問題を引き起こしました。新しいアクティビティが呼び出されているようですが、ハンドラーはアクティビティを閉じません。

問題が発生するlvl1のアクティビティを添付します。( さまざまな色の背景の目に見えない画像を使用して、タッチ可能な領域を設定します。たとえば、背景色が白の場合、ポップアップが返されます。黄色の場合は、別のアクティビティが呼び出されます。(色はそうではありません) Motorola Dunno で動作しないようです。なぜですか。))

これはポップアップのハンドラです

else if (ct.closeMatch (Color.WHITE, touchColor, tolerance)) // con esto evito poing & click muy seguidos
{          
  Random r = new Random();
  int txt= r.nextInt(6-0) + 0;
  if(txt==0){ variables.pointtxt = "Nothing interesting"; }
  else if (txt==1){ variables.pointtxt = "There´s nothing there"; }  
  else if (txt==2){ variables.pointtxt = "I can´t do nothing with that"; }  
  else if (txt==3){ variables.pointtxt = "Wait... nop nothing"; }   
  else if (txt==4){ variables.pointtxt = "Nothing"; }   
  else if (txt==5){ variables.pointtxt = "More nothing"; }

 LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

 View popupView = layoutInflater.inflate(R.layout.popup, null);  
 final PopupWindow popupWindow = new PopupWindow(
    popupView, LayoutParams.FILL_PARENT,  LayoutParams.WRAP_CONTENT);
 TextView text = (TextView) popupView.findViewById(R.id.popuptxt);
 text.setText(variables.pointtxt);

 popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 250);

 new Handler().postDelayed(new Runnable() {
      public void run() {    
        if (popupWindow.isShowing()== true)
          popupWindow.dismiss();
      }
    }, 1100
  );           
}

handledHere = true; 
break;

default:
  handledHere = false;
} // end switch

そして、これがアクティビティを閉じて新しいアクティビティを呼び出す方法です

else if (ct.closeMatch (Color.YELLOW, touchColor, tolerance)) {
  Intent game = new Intent(lvl1.this, lvl1_0.class); startActivity(game);
  Handler mHandler1 = new Handler();
  {
    Runnable mLaunchTask3 = null;
    mHandler1.postDelayed(mLaunchTask3,1100);
  }

  //will launch the activity
  Runnable mLaunchTask3 = new Runnable() {
    public void run() {
      lvl1.this.finish();
    }
  };
}
4

1 に答える 1

0

このコードを使用して、アクティビティを閉じるときにハンドラーを削除します。

mHandler1.removeCallbacksAndMessages(null);

新しいハンドラーを開始すると、前のハンドラーは削除されず、バックグラウンドで実行され続けるため

于 2012-12-01T16:04:21.353 に答える