我有一个游戏测验,如果用户的答案错误,弹出一个弹出屏幕并在屏幕上停留3秒钟。我用Handler这样做。由于游戏时间有限,他们提出了按下按钮以从屏幕上删除弹出窗口的解决方案:)并继续前进。所以我禁用了弹出活动的后退按钮。但是,现在我有另一个问题。看起来我的处理程序从最后一次点击计算时间,所以如果我点击那个弹出屏幕上的后退按钮处理程序从该点击计算时间。如果我再次点击它,它从开始开始。我试图点击它10-12次,我的弹出屏幕开启了半分钟。 :)那并不好。如果在他的时间点击或不点击后退按钮,如何使我的弹出窗口开启3秒钟无效?
我的弹出类:
public class WrongAnswer extends Activity{
TextView wrong;
String correctAnswer, correct;
public final int delayTime = 3000;
private Handler myHandler = new Handler();
public void onUserInteraction(){
myHandler.removeCallbacks(closePopup);
myHandler.postDelayed(closePopup, delayTime);
}
private Runnable closePopup = new Runnable(){
public void run(){
finish();
}
};
@Override
public void onBackPressed() {
//do nothing
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.wrong);
Bundle extras = getIntent().getExtras();
if(extras !=null) {
correct = extras.getString("correctAnswer");
}
inicijalizujVarijable();
myHandler.postDelayed(closePopup, delayTime);
}
private void inicijalizujVarijable() {
wrong = (TextView) findViewById(R.id.tvWrong);
Typeface pogresanFont = Typeface.createFromAsset(getAssets(), "Bebas.ttf");
wrong.setTypeface(pogresanFont);
Wrong.setText("Wrong answer!\nCorrect answer is:\n\n" + correct);
}
}
答案 0 :(得分:1)
删除它:
public void onUserInteraction(){
myHandler.removeCallbacks(closePopup);
myHandler.postDelayed(closePopup, delayTime);
}
它会在任何交互中重置您的处理程序,从而导致您描述的行为。
作为旁注,将Activity
专用于此功能似乎相当繁重,我认为您最好使用Dialog
或类似功能。
答案 1 :(得分:0)
您可以将弹出窗口显示为Dialog,将setCancelable()显示为false。
http://developer.android.com/reference/android/app/Dialog.html#setCancelable(boolean)