我的活动后退按钮出现此错误。所有活动都有这个问题。当我按下Back Button时,它进入主屏幕,而不是堆栈中的最后一次活动。我已经推出了一条Log消息,但在某些活动中它不会在LogCat上打印它,在此处发布的此活动中它会打印日志。但看起来有些活动并没有进入方法内部。
我的应用程序中有三个选项卡,其中一个扩展ActivityGroup
而不是活动。但是我不认为这个问题,我已经删除了这个标签,并且它一直在发生。
所以我的问题是,如何解决它,如何进入上一次活动而不是进入主屏幕?
实际上它会进入调用它的最后一个屏幕。如果我在主屏幕上调用它,那么如果我在主屏幕上调用它,我会在其中放置快捷方式和小部件进入此屏幕。 对于我在docs中读到的内容,它应该转到历史堆栈的最后一个,这意味着这个屏幕在堆栈中,但没有我的活动。对吗?的
我试过这个,但不适用于所有活动。它一直在主屏幕上。我不知道它能是什么。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
我也试过onBackPressed()
方法,但没有。而且,我没有调用完成,而是尝试了一个新的意图并调用了一些活动明确,但也没有。
我不能把我所有的活动放在这里,因为很多 但是这里有一个,也许如果有什么用,我可以在别人身上实施。感谢。
public class MyActivity extends Activity {
private ListView listview;
private ImageView imgView;
private Resources res;
private Drawable transition;
private SimpleCursorAdapter adapter;
private DataHandlerDB handler;
private SQLiteDatabase db;
private OpenHelper helper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
helper = new OpenHelper(this);
db = helper.getWritableDatabase();
setBasicContent();
}
@Override
public void onStart() {
super.onStart();
helper = new OpenHelper(this);
db = helper.getWritableDatabase();
setBasicContent();
}
@Override
public void onDestroy() {
super.onDestroy();
DataHandlerDB.selectTopCalls(this).close();
db.close();
helper.close();
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onStop() {
super.onStop();
DataHandlerDB.selectTopCalls(this).close();
db.close();
helper.close();
}
@Override
protected void onResume() {
super.onResume();
setBasicContent();
}
public void setBasicContent() {
listview = (ListView) findViewById(R.id.list_view);
Cursor c = DataHandlerDB.selectTopCalls(this);
c.moveToFirst();
startManagingCursor(c);
adapter = new SimpleCursorAdapter(this, R.layout.list_item, c,
new String[] { DataHandlerDB.CONTACT_NAME_COL,
DataHandlerDB.CONTACT_NUMBER_COL,
DataHandlerDB.CONTACT_DURATION_COL,
DataHandlerDB.CONTACT_DATE_COL }, new int[] {
R.id.contact_name, R.id.phone_number, R.id.duration,
R.id.date });
listview.setAdapter(adapter);
}
}
以下是扩展ActivityGroup的活动,其调用如下:
tabHost.addTab(tabHost.newTabSpec("three").setIndicator("Filter Options",
res.getDrawable(R.drawable.filteroptionsiconfile))
.setContent(new Intent(this, FilterOptionsGroup.class)));
FilterOptionsGroup.java
public class FilterOptionsGroup extends ActivityGroup {
public static FilterOptionsGroup group;
private ArrayList<View> history;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.history = new ArrayList<View>();
group = this;
View view = getLocalActivityManager().startActivity(
"FilterOptions",
new Intent(this, FilterOptions.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
.getDecorView();
replaceView(view);
}
public void replaceView(View v) {
// Adds the old one to history
history.add(v);
// Changes this Groups View to the new View.
setContentView(v);
}
}
答案 0 :(得分:1)
如果您的所有活动都封装在选项卡主机中,并且它们都在选项卡中托管,那么它们并不真正位于堆栈中。它们位于前景视图中,即标签主机屏幕,后退按钮将您转到上一个应用程序。
答案 1 :(得分:0)
调用此活动的活动是否可能自行完成?如果不覆盖onkeydown,则默认行为是处理后退按钮。请注意,您将backButtonPressed与onBackPressed混淆。使用@Override注释确保您覆盖正确的方法......
来自Android的Activity源
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getApplicationInfo().targetSdkVersion
>= Build.VERSION_CODES.ECLAIR) {
event.startTracking();
} else {
onBackPressed();
}
return true;
}
<snip>
...
所以,你真的不需要做任何事情。
答案 2 :(得分:0)
检查您的清单,您可能已将android:noHistory
设置为true
答案 3 :(得分:0)
试着打电话
onKeyDown方法开头的super.onKeyDown(keyCode, event);
。
我有类似的问题,这是一个解决方案