Java 按后退键时,活动不会返回

Java 按后退键时,活动不会返回,java,android,back-button,Java,Android,Back Button,我遇到了一个奇怪的问题 按后退键时,活动不会返回。 在logcat中,它正在显示 04-15 19:24:09.063: V/Activity(23041): Tracking Key Up, activity is resumed: false 这是我的活动代码 package com.sandy.letsfixthat; import android.app.Activity; import android.app.LocalActivityManager; import android

我遇到了一个奇怪的问题

按后退键时,活动不会返回。 在logcat中,它正在显示

04-15 19:24:09.063: V/Activity(23041): Tracking Key Up, activity is resumed: false
这是我的活动代码

package com.sandy.letsfixthat;

import android.app.Activity;
import android.app.LocalActivityManager;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;


public class Slider extends Activity {
    TabSpec beginer,inter,dev;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.slider);
        TabHost th = (TabHost)findViewById(R.id.tabhost);

        LocalActivityManager mLocalActivityManager = new LocalActivityManager(this, false);

        // state will be bundle your activity state which you
        // get in onCreate
        mLocalActivityManager.dispatchCreate(savedInstanceState);
        th.setup(mLocalActivityManager);
        //tab for beginner
        beginer = th.newTabSpec("Begin");
        beginer.setIndicator("Beginner");
        Intent begin = new Intent(this, Beginner.class);
        beginer.setContent(begin);
        th.addTab(beginer);

        //tab for intermediate
        inter = th.newTabSpec("Inter");
        inter.setIndicator("Intermediate");
        Intent Intermediate = new Intent(this, Intermediate.class);
        inter.setContent(Intermediate);
        th.addTab(inter);

        //tab for developers
        dev = th.newTabSpec("Devel");
        dev.setIndicator("Other");
        Intent develop = new Intent(this, Developer.class);
        dev.setContent(develop);
        th.addTab(dev);
    }

    public boolean onCreateOptionsMenu(android.view.Menu menu) {
        // TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu);
        MenuInflater blowUp = getMenuInflater();
        blowUp.inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()){
        case R.id.aboutUs:
            Intent i = new Intent(this,About.class);
            startActivity(i);
            break;

        case R.id.exit:
            finish();
            break;

  /*    case R.id.setting:
            Intent setting = new Intent (this,Settings.class);
            startActivity(setting);
            break;                          */
        }
        return false;
    }

    @Override
    public void onPause() {
        // your code.
        super.onPause();
        finish();
    }
}
主要活动代码

package com.sandy.letsfixthat;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {
    Button go;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        go = (Button)findViewById(R.id.bgo);
        go.setOnClickListener(this);

    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        switch (arg0.getId()){
        case R.id.bgo:
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("NOTE:- this is an initial release. MORE TUTORIAL COMING IN NEXT UPDATE")
                   .setCancelable(false)
                   .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // do things
                    Intent i = new Intent(MainActivity.this,Slider.class);
                    startActivity(i);
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
            break;
        }
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        finish();
    }
}
当我打开这个滑块活动并按下后退按钮时,什么都没有发生。
按下“后退”按钮时,它应该退出应用程序。

您可以通过以下操作覆盖“后退”按钮功能:

public void onBackPressed(){
  finish(); 
}
所以它将完成你的应用程序。 请记住,这不是最好的解决方案,您不应该在on pause方法中使用finish()

mLocalActivityManager.dispatchResume();

为我工作

通常情况下,您不需要为“后退”按钮执行任何操作来终止活动。您需要做的不是覆盖onBackButtonPressed()onKeyDown()。或者,如果您覆盖了onKeyDown(),则除了返回false之外,不要对keycode keycode\u BACK执行任何操作


请注意,这只会终止活动,而不是应用程序。如果您想退出整个应用程序,那么就有点麻烦了。让我们知道这是否是您想要做的,我将详细介绍这个答案。

为什么您在onPause()中调用finish()?要在我移动到其他活动时暂停活动,这不会暂停它,它会结束它。例如,如果你的应用程序被放在后台,就不会再回来,因为它将被销毁。那么它应该是什么样子呢?操作系统处理活动的暂停,你不必重写该方法,除非你想在其中执行某些操作,如保存首选项、写入数据库等。使用您声明的菜单中的退出选项时,应用程序是否正在退出?标准行为是在按下后退按钮时完成活动。您无需重写此方法即可获得标准行为。此解决方案没有用处。如果您能提供更详细的说明性答案(例如,解释建议的修复程序解决问题的原因),可能会很有用。我真的不知道它是如何解决问题的,但在解决此问题时,我发现容器活动在其onResume()中调用了此“dispatchResume()”因此,LocalActivityManager可能需要调用它来“管理”活动。希望对你有帮助。