我在我的活動中使用後退按鈕時出現此錯誤。所有活動都有這個問題。當我按下後退按鈕時,它將進入主屏幕,而不是在堆棧中進行最後的活動。我已經提出了一條日誌消息,但在某些活動中,它不會在LogCat上打印它,在此處發佈的活動中它會打印日誌。但是看起來有些活動不在方法內部。BackButton不會調用歷史堆棧中的最後一個活動
我的應用程序中有三個選項卡,其中一個擴展爲ActivityGroup
而不是活動。但我不認爲它是這個問題,我已經刪除了這個標籤,並且它一直在發生。
所以我的問題是,我該如何解決這個問題,我如何讓它進入最後的活動,而不是去主屏幕?
實際上,它進入了它被調用的最後一個屏幕。如果我在主屏幕上調用它,則會轉到此屏幕,如果我在主屏幕上調用它,則會將快捷方式和小部件放到此屏幕中。 對於我在文檔中讀到的內容,它應該到達歷史堆棧中的最後一個,這意味着此屏幕在堆棧中,但沒有我的活動。對?
我試圖把這個,但不適用於所有活動。它繼續前往主屏幕。我不知道它會是什麼。
@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);
}
}
當你開始新的活動時,你總是調用finish()嗎? –
號我應該叫它? – rogcg
不,你不應該。只是爲了確保你沒有破壞堆棧中的活動。嘗試消除onBackPressed()和/或onKeyDown()。它工作嗎?也許你應該發佈擴展ActivityGroup的活動。 –