Java 按后退键时,活动不会返回
我遇到了一个奇怪的问题 按后退键时,活动不会返回。 在logcat中,它正在显示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
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可能需要调用它来“管理”活动。希望对你有帮助。