我编写了一个小游戏,在开始屏幕上,有不同的选项,比如启动游戏,开始新的活动。但其他按钮喜欢“合法的东西”和“#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);
}
}
答案 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();
}
多数民众赞成......