gpt4 book ai didi

java - 如何用后退按钮终止 Activity ?

转载 作者:行者123 更新时间:2023-12-01 08:13:37 25 4
gpt4 key购买 nike

这是我无意中发现的。我有一个问答游戏,有一个弹出窗口显示正确答案,有一个弹出窗口显示错误答案,游戏结束后我有一个弹出窗口显示结果。但是,今天我在游戏中间按后退按钮返回到我的主屏幕(不是游戏主屏幕,而是我的操作系统主屏幕),游戏仍然在后台,就像所有其他 Android 应用程序一样。几秒钟后,我的错误答案出现了。 :) 时间到了,答案自然是错误的。之后我的最终结果弹出窗口继续出现。那么,当我按下后退按钮时如何终止该 Activity 呢?我不知道你们是否需要我的代码,但以防万一,这是我的游戏 Activity :

public class NeogranicenoPetGresaka extends Activity implements OnClickListener{

MyCount brojacVremena = new MyCount(6000, 1000);

LinkedList<Long> mAnsweredQuestions = new LinkedList<Long>();

private String generateWhereClause(){
StringBuilder result = new StringBuilder();
for (Long l : mAnsweredQuestions){
result.append(" AND _ID <> " + l);
}
return result.toString();
}

Button bIzlazIzKviza, bOdgovor1, bOdgovor2, bOdgovor3, bOdgovor4;
TextView question, netacniOdg, score, countdown;
int brojacPogresnihOdgovora = 0;
int brojacTacnihOdgovora = 0;
public static String tacanOdg;

Runnable mLaunchTask = new Runnable() {
public void run() {
nextQuestion();
brojacVremena.start();
}
};
Runnable mLaunchTaskFinish = new Runnable() {
public void run() {
brojacVremena.cancel();
finish();
}
};


private class Answer {
public Answer(String opt, boolean correct) {
option = opt;
isCorrect = correct;
}

String option;
boolean isCorrect;
}
Handler mHandler = new Handler();

final OnClickListener clickListener = new OnClickListener() {
public void onClick(View v) {

Answer ans = (Answer) v.getTag();
if (ans.isCorrect) {
brojacVremena.cancel();
brojacTacnihOdgovora = brojacTacnihOdgovora + 5;
Intent i = new Intent("rs.androidaplikacijekvizopstekulture.TACANODGOVOR");
startActivity(i);
mHandler.postDelayed(mLaunchTask,1200);
}
/*else{
brojacVremena.cancel();
brojacPogresnihOdgovora++;
Intent i = new Intent(getApplicationContext(), PogresanOdgovor.class);
i.putExtra("tacanOdgovor", tacanOdg);
startActivity(i);
mHandler.postDelayed(mLaunchTask,2200);
}*/
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.neograniceno);

Typeface dugmad = Typeface.createFromAsset(getAssets(), "Bebas.ttf");
Typeface pitanje = Typeface.createFromAsset(getAssets(), "myriad.ttf");
bIzlazIzKviza = (Button) findViewById(R.id.bIzlazIzKvizaN);
netacniOdg = (TextView) findViewById(R.id.tvBrojPitanjaN);
question = (TextView) findViewById(R.id.tvPitanjeN);
bOdgovor1 = (Button) findViewById(R.id.bOdgovorN1);
bOdgovor2 = (Button) findViewById(R.id.bOdgovorN2);
bOdgovor3 = (Button) findViewById(R.id.bOdgovorN3);
bOdgovor4 = (Button) findViewById(R.id.bOdgovorN4);
score = (TextView) findViewById(R.id.tvSkor2N);
countdown = (TextView) findViewById(R.id.tvCountdownN);
bOdgovor1.setTypeface(dugmad);
bOdgovor2.setTypeface(dugmad);
bOdgovor3.setTypeface(dugmad);
bOdgovor4.setTypeface(dugmad);
bIzlazIzKviza.setTypeface(dugmad);
netacniOdg.setTypeface(dugmad);
question.setTypeface(pitanje);
score.setTypeface(dugmad);
countdown.setTypeface(dugmad);

nextQuestion(); //startuje prvo pitanje!
brojacVremena.start(); //startuje brojac vremena
}


public class MyCount extends CountDownTimer {

public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}

@Override
public void onFinish() {

brojacPogresnihOdgovora++;
Intent i = new Intent(getApplicationContext(), PogresanOdgovor.class);
i.putExtra("tacanOdgovor", tacanOdg);
startActivity(i);
mHandler.postDelayed(mLaunchTask,2200);
}

@Override
public void onTick(long millisUntilFinished) {
countdown.setText("" + millisUntilFinished / 1000);
}
}

public void onClick(View v) {
// TODO Auto-generated method stub


}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}

public void nextQuestion() {


TestAdapter mDbHelper = new TestAdapter(this);
mDbHelper.createDatabase();

try{ //Pokusava da otvori db

mDbHelper.open(); //baza otvorena

Cursor c = mDbHelper.getTestData(generateWhereClause());
mAnsweredQuestions.add(c.getLong(0));

List<Answer> labels = new ArrayList<Answer>();

labels.add(new Answer(c.getString(2), true));
labels.add(new Answer(c.getString(3), false));
labels.add(new Answer(c.getString(4), false));
labels.add(new Answer(c.getString(5), false));

Collections.shuffle(labels);

tacanOdg = c.getString(2);

if(brojacPogresnihOdgovora < 20){


question.setText(c.getString(1));

bOdgovor1.setText(labels.get(0).option);
bOdgovor1.setTag(labels.get(0));
bOdgovor1.setOnClickListener(clickListener);

bOdgovor2.setText(labels.get(1).option);
bOdgovor2.setTag(labels.get(1));
bOdgovor2.setOnClickListener(clickListener);

bOdgovor3.setText(labels.get(2).option);
bOdgovor3.setTag(labels.get(2));
bOdgovor3.setOnClickListener(clickListener);

bOdgovor4.setText(labels.get(3).option);
bOdgovor4.setTag(labels.get(3));
bOdgovor4.setOnClickListener(clickListener);

netacniOdg.setText("" + brojacPogresnihOdgovora);
score.setText("Score: " + brojacTacnihOdgovora);
}
else{
brojacVremena.cancel();
Intent i = new Intent(getApplicationContext(), Rezultat.class);
i.putExtra("noviRezultat", brojacTacnihOdgovora);
startActivity(i);
String brojacTacnihOdgovoraString = String.valueOf(brojacTacnihOdgovora);
mHandler.postDelayed(mLaunchTaskFinish,4000);
//SwarmLeaderboard.submitScore(6863, brojacTacnihOdgovora);
HeyzapLib.submitScore(this, brojacTacnihOdgovoraString, "Osvojili ste " + brojacTacnihOdgovoraString + " poena!", "1T3");
}
}
finally{ // kada zavrsi sa koriscenjem baze podataka, zatvara db
mDbHelper.close();
}

bIzlazIzKviza.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
finish();
}
});
}
}

我尝试将其放入我的代码中,但没有成功:

@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}

也尝试过这个,但没有成功:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
finish();
}
return super.onKeyDown(keyCode, event);
}

最佳答案

问题是 Activity 已停止,但您创建的后台线程仍在运行。因此,您需要重写 onStop 并取消任何后台线程。

类似于:

@Override public void onStop() {
super.onStop();
brojacVremena.cancel();
}

关于java - 如何用后退按钮终止 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15326013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com