按钮在onBackPressed()后没有反应

时间:2014-05-28 09:33:36

标签: android android-layout back-button

我编写了一个小游戏,在开始屏幕上,有不同的选项,比如启动游戏,开始新的活动。但其他按钮喜欢“合法的东西”和“#39;或者' tutuorial'仅通过setContentView显示新的XML布局。

现在,当你处于其中一个布局时,我试图让BackButton工作(所以当你按下它时你会回到开始屏幕)。我使用onBackPressed()方法,但也尝试使用onKeyDown(在我的情况下效果相同)。我在该方法中所做的就是使用setContentView再次调出开始屏幕布局。

问题是,一旦我回到开始屏幕,按钮就不起作用了。按下它们会变成橙色,但没有任何反应。

我需要改变哪些建议?

我的(缩短的)活动:

public class Startbildschirm extends Activity {

    private int mSchwierigkeit = Const.LEICHT;

    public void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.startbildschirm);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        schwierigkeitListener();
        impressumListener();
        highscoreListener();
        tutorialListener();
        startListener();

    }

    private void schwierigkeitListener () {
        Button einfach = (Button) findViewById(R.id.radioEinfach);
        einfach.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                mSchwierigkeit = Const.LEICHT;
            }
        });

        Button mittel = (Button) findViewById(R.id.radioMittel);
        mittel.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                mSchwierigkeit = Const.MITTEL;
            }
        });

        Button schwer = (Button) findViewById(R.id.radioSchwer);
        schwer.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                mSchwierigkeit = Const.SCHWER;
            }
        });
    }

    private void impressumListener () {
        Button impressum = (Button) findViewById(R.id.buttonImpressum);
        impressum.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                setContentView(R.layout.impressum);             
            }
        });
    }

    private void highscoreListener () {
        Button highscore = (Button) findViewById(R.id.buttonHighscore);
        highscore.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                String highscoreImp = getOldHighscore();
                setContentView(R.layout.highscore);
                TextView highscoreanzeige = (TextView) findViewById(R.id.highscore); 
                highscoreanzeige.setText(highscoreImp+" "+"sekunden");
            }
        });
    }

    private void tutorialListener () {
        Button tutorial = (Button) findViewById(R.id.buttonTutorial);
        tutorial.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                setContentView(R.layout.tutorial);
            }
        });
    }

    private void startListener () {
        Button start = (Button) findViewById(R.id.buttonStart);
        start.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                Intent startSpiel = new Intent(Startbildschirm.this, Spiel.class);
                Bundle giveSchwierigkeit = new Bundle();
                giveSchwierigkeit.putInt("schwierigkeit", mSchwierigkeit);
                startSpiel.putExtras(giveSchwierigkeit);
                startActivity(startSpiel);
            }
        });
    }

    public void onBackPressed () {
        setContentView(R.layout.startbildschirm);
    }


}

2 个答案:

答案 0 :(得分:1)

当您调用setContentView()时,布局会膨胀,并在层次结构中创建新的视图对象。这些视图未设置OnClickListener

作为快速解决方法,请在setContentView()之后重置监听器。

要获得更好的解决方案,请考虑将视图分离到不同的活动或片段,而不是使用setContentView()更改现有活动的视图层次结构。

答案 1 :(得分:1)

@laalto评论绝对正确所以在这种情况下放下方法或 只需在onBackPressed()

中调用OnCreate视图方法
public void onBackPressed () {
        onCreate(null);
    }

或第二种方式

public void onBackPressed () {
           setContentView(R.layout.startbildschirm);
            schwierigkeitListener();
        impressumListener();
        highscoreListener();
        tutorialListener();
        startListener();
        }

多数民众赞成......