我有一个菜单,当点击菜单时,它进入另一个菜单。 例如,mainmenu - >点击机场指南 - > MENU2 但当我在menu2并按下后退按钮时,应用程序正在关闭而不是返回主菜单。我无法弄清楚这里的问题。我是Android开发的新手
package com.shashank.sharjahinternationalairport;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class MainActivity extends Activity {
ImageButton flightInfoButton;
ImageButton airportGuideButton;
ImageButton visitorInfoButton;
ImageButton saaDcaButton;
ImageButton cargoButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
flightInfoButton = (ImageButton) findViewById(R.id.flightInfo);
airportGuideButton = (ImageButton) findViewById(R.id.airportGuide);
visitorInfoButton = (ImageButton) findViewById(R.id.visitorInfo);
saaDcaButton = (ImageButton) findViewById(R.id.saaDca);
cargoButton = (ImageButton) findViewById(R.id.cargo);
airportGuideButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View V){
setContentView(R.layout.airport_guide);
}
});
visitorInfoButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View V){
setContentView(R.layout.visitor_info);
}
});
saaDcaButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View V){
setContentView(R.layout.saa_dca);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
答案 0 :(得分:1)
您正在使用setContentView
,因此您只是更改了视图布局。当您按下后退按钮时,Android会调用onBackPressed
,其默认实现是调用finnish()
方法,以关闭活动。
您可以覆盖onBackPressed
方法以设置其他视图。
@Override
public void onBackPressed()
{
//setContentView the previous view
}
希望它有所帮助!
答案 1 :(得分:1)
你总是可以覆盖Activity的onBackPressed方法,你会有类似这样的东西
public class MainActivity extends Activity {
ImageButton flightInfoButton;
ImageButton airportGuideButton;
ImageButton visitorInfoButton;
ImageButton saaDcaButton;
ImageButton cargoButton;
private enum VIEWS {
VIEW_1, VIEW_2, VIEW_3
};
private VIEWS mSelectedView = VIEWS.VIEW_1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
flightInfoButton = (ImageButton) findViewById(R.id.flightInfo);
airportGuideButton = (ImageButton) findViewById(R.id.airportGuide);
visitorInfoButton = (ImageButton) findViewById(R.id.visitorInfo);
saaDcaButton = (ImageButton) findViewById(R.id.saaDca);
cargoButton = (ImageButton) findViewById(R.id.cargo);
airportGuideButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View V) {
showView1();
}
});
visitorInfoButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View V) {
showView2();
}
});
saaDcaButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View V) {
showView3();
}
});
}
private void showView1() {
setContentView(R.layout.airport_guide);
mSelectedView = VIEWS.VIEW_1;
}
private void showView2() {
setContentView(R.layout.visitor_info);
mSelectedView = VIEWS.VIEW_2;
}
private void showView3() {
setContentView(R.layout.saa_dca);
mSelectedView = VIEWS.VIEW_3;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onBackPressed() {
switch (mSelectedView) {
case VIEW_1:
super.onBackPressed();
break;
case VIEW_2:
showView1();
break;
case VIEW_3:
showView2();
break;
}
}
}
答案 2 :(得分:0)
您所做的就是更改MainActivity类的内容视图,您需要为不同的布局创建sperate类,您可以通过INTENT调用它
答案 3 :(得分:0)
这是发生这种情况,因为您只使用一个活动,而且只需更改内容视图即可。即使这看起来像一个多页面活动,它只是一个屏幕。因此onBackPressed()会关闭。 Yo必须为每个菜单选项创建不同的活动,并使用Intents on Button Click启动它们。
Intent i = new Intent(this,SecondActivity.class); startActivity(ⅰ);
答案 4 :(得分:0)
您只使用一项活动,如果活动很多,则意味着您可以追溯到以前加载的活动。
否则你只需要一个活动意味着请将布局存储在某个数组中,然后在onBackPressed()中你可以得到LIFO方式
@Override
public void onBackPressed() {
}