Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 按钮不';反压后不反应()_Android_Android Layout_Back Button - Fatal编程技术网

Android 按钮不';反压后不反应()

Android 按钮不';反压后不反应(),android,android-layout,back-button,Android,Android Layout,Back Button,我正在编写一个小游戏,在开始屏幕上,有不同的选项,比如开始一个新活动的游戏。但其他按钮,如“legal stuff”或“tutuorial”,仅通过setContentView显示新的XML布局 现在,我正试图让BackButton在您处于其中一个布局时工作(因此,当您按下BackButton时,您将返回到开始屏幕)。我使用的是onBackPressed()方法,但也尝试了onKeyDown(在我的例子中效果相同)。我在该方法中所做的就是使用setContentView再次显示开始屏幕布局 问题

我正在编写一个小游戏,在开始屏幕上,有不同的选项,比如开始一个新活动的游戏。但其他按钮,如“legal stuff”或“tutuorial”,仅通过setContentView显示新的XML布局

现在,我正试图让BackButton在您处于其中一个布局时工作(因此,当您按下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);
    }


}

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

作为一种快速修复方法,请在
setContentView()之后重置侦听器


对于更好的解决方案,考虑将视图分离为不同的活动或片段,而不是用<代码> SETCONTENTVIEW()/代码>更改现有活动的视图层次结构。 只需回忆一下onBackPressed()中的OnCreate视图方法

还是第二条路

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

就这样…

好的,谢谢你的详细解释。现在我知道确切的原因了。不过,我将使用第二个答案中的解决方案,只是因为时间不够(这是一个uni项目,我对片段一无所知)。
public void onBackPressed () {
           setContentView(R.layout.startbildschirm);
            schwierigkeitListener();
        impressumListener();
        highscoreListener();
        tutorialListener();
        startListener();
        }