Android后退按钮不起作用

时间:2012-06-10 10:30:10

标签: java android

我正在制作我的第一个Android应用程序,当我按下后退按钮时,它会关闭应用程序,而不是回到之前的活动。有谁知道我怎么解决这个问题?

由于

这是我的" Hoofdscherm"页面,从这里你可以去" Acties"页

package com.WNF;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;

public class Hoofdscherm extends Activity {
// aanroepen van een bundle, kan je elke naam geven die je maar wilt, 
//zolang de bundle als de onCreate maar dezelfde naam hebben
   public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        // de setContentView is niets meer dan de gegevens van de
//View ophalen uit de R.layout.naamvandeXML
        // Onthoud goed dat je dezelfde XMLs voor meerdere pagina's 
//kan gebruiken.
        setContentView(R.layout.hoofdscherm);

        Button b = (Button) findViewById(R.id.button1);
        ImageButton i = (ImageButton) findViewById(R.id.imageButton1);

        b.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                Intent in = new Intent(Hoofdscherm.this,Acties.class);
                startActivity(in);
                finish(); //deze activity wordt gestopt
            }
        });

        i.setOnClickListener(new OnClickListener(){
            public void onClick(View g){
                Intent ib = new Intent(Hoofdscherm.this,Acties.class);
                startActivity(ib);
                finish();
            }
        });


   }
} 

这就是" Acties"页

package com.WNF;


import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;

public class Acties extends Activity{
// aanroepen van een bundle, kan je elke naam geven die je maar wilt, 
//zolang de bundle als de onCreate maar dezelfde naam hebben
@Override  
public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        // de setContentView is niets meer dan de gegevens van de
//View ophalen uit de R.layout.naamvandeXML
        // Onthoud goed dat je dezelfde XMLs voor meerdere pagina's 
//kan gebruiken.
        setContentView(R.layout.acties1);

        getIntent();
   }
}

3 个答案:

答案 0 :(得分:1)

Hoofdscherm活动中,您呼叫Acties活动。然后在Acties中按回来,您的申请将关闭。正确?

理想情况下,当你按回Acties时会发生什么,它应该转到Hoofdscherm,但是因为你在finish();活动中呼叫Hoofdscherm,它不再存在。因此您的应用程序退出。

如果您想从Hoofdscherm返回Acties,请移除finish()活动中的Hoofdscherm来电。

编辑:

Here's a bit more关于finish()。 请记住 - 只有在您要关闭活动时才调用finish(),如果您想要返回活动,请不要致电finish()

答案 1 :(得分:0)

您可以通过覆盖活动中的onKeyDown方法来覆盖按钮的行为,并使用简单的if语句来确定按下的键是否为后退键

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        // your code here
        return true;
    else return false 
    return super.onKeyDown(keyCode, event);
}

并且在语句内部只写下会称之为其他活动的代码。

编辑我看到你添加了你的代码,你在调用第二个活动后调用了finish(),这会杀死你的第一个活动,要么删除finish(),要么召唤第一个活动通过第二次活动的意图。

答案 2 :(得分:0)

这是您的解决方案

删除finish()方法。

b.setOnClickListener(new OnClickListener(){

            public void onClick(View v) {

                Intent in = new Intent(Hoofdscherm.this,Acties.class);

                startActivity(in);

            finish(); // Remove this..and it will work as you want it to
        }
    });

finish() method avoids storing of the activity on the Back Stack