gpt4 book ai didi

android - BackButton 不会调用历史堆栈中的最后一个 Activity

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:05 25 4
gpt4 key购买 nike

我的 Activity 后退按钮出现此错误。所有 Activity 都有这个问题。当我按下后退按钮时,它会转到主屏幕,而不是堆栈中的最后一个 Activity 。我已经放置了一条日志消息,但在某些 Activity 中它不会在 LogCat 上打印它,在此处发布的此 Activity 中它会打印日志。但看起来某些 Activity 并未进入方法内部。

我的应用程序中有三个选项卡,其中一个扩展了 ActivityGroup 而不是 Activity。但我不认为这是问题所在,我已经删除了这个标签,但它一直在发生。

所以我的问题是,如何解决它,如何让它转到上一个 Activity 而不是转到主屏幕?

事实上,它会转到调用它的最后一个屏幕。如果我在主屏幕上调用它,它会转到这个,如果我在主屏幕上调用它,我在其中放置快捷方式和小部件,它会转到这个屏幕。对于我在文档中阅读的内容,它应该转到历史堆栈中的最后一个,这意味着此屏幕在堆栈中,但没有我的 Activity 。对吧?

我试过放置这个但并不适用于所有 Activity 。它一直转到主屏幕。我不知道它会是什么。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}

我也试过 onBackPressed() 方法,但没有。而且,我没有调用 finish,而是尝试了一个新的 Intent 并明确地调用了一些 Activity ,但也没有。

我不能把我所有的 Activity 都放在这里,因为有很多。
但这是一个,也许如果某些东西适用于此,我可以在其他人身上实现。谢谢。

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 的 Activity ,其名称如下:

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);
}

}

最佳答案

如果您的所有 Activity 都封装在选项卡主机中,并且它们都托管在选项卡中,那么它们并不是真正位于堆栈中。它们位于选项卡主机屏幕的前景 View 中,后退按钮会将您带到上一个应用程序。

关于android - BackButton 不会调用历史堆栈中的最后一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6444684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com