Android 按钮不';反压后不反应()
我正在编写一个小游戏,在开始屏幕上,有不同的选项,比如开始一个新活动的游戏。但其他按钮,如“legal stuff”或“tutuorial”,仅通过setContentView显示新的XML布局 现在,我正试图让BackButton在您处于其中一个布局时工作(因此,当您按下BackButton时,您将返回到开始屏幕)。我使用的是onBackPressed()方法,但也尝试了onKeyDown(在我的例子中效果相同)。我在该方法中所做的就是使用setContentView再次显示开始屏幕布局 问题是,一旦我回到开始屏幕,按钮就不起作用了。当按下时,它们变成橙色,但什么也没发生 有什么建议我需要改变吗 我的(缩短的)活动:Android 按钮不';反压后不反应(),android,android-layout,back-button,Android,Android Layout,Back Button,我正在编写一个小游戏,在开始屏幕上,有不同的选项,比如开始一个新活动的游戏。但其他按钮,如“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();
}