按下后退按钮即可关闭Android应用

时间:2014-02-13 11:58:28

标签: android android-activity back-button

我有一个菜单,当点击菜单时,它进入另一个菜单。 例如,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;
}

5 个答案:

答案 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() {


}
相关问题