我正在嘗試做類似於this的問題。清除Android背堆棧
我有一個主要的應用程序A和子應用程序B和C. B是一個可搜索的字典,C是一個定義,所以如果你搜索很多單詞,你可以結束堆棧看起來像A> B> C> B> B> C> B> C> C> C ...等等
每當我回去,我想回到原來的B,所以我想要回棧基本上始終呆在A> B。
我目前已經使用Intent設置了它,所以當從C按下後退按鈕時,它會轉到B的新實例,但這顯然不是我想要的。
想法?
我正在嘗試做類似於this的問題。清除Android背堆棧
我有一個主要的應用程序A和子應用程序B和C. B是一個可搜索的字典,C是一個定義,所以如果你搜索很多單詞,你可以結束堆棧看起來像A> B> C> B> B> C> B> C> C> C ...等等
每當我回去,我想回到原來的B,所以我想要回棧基本上始終呆在A> B。
我目前已經使用Intent設置了它,所以當從C按下後退按鈕時,它會轉到B的新實例,但這顯然不是我想要的。
想法?
不應該從C打回你帶到原來的B?因此,堆棧應該是這樣的:
A>
B>
C<
B>
C>
C<
C<
B<
A
與>去到下一個活動,並<是後退按鈕?
你可以重載onBackPressed所有的活動,所以對於C它加載一個新的B,B它加載一個新的A,你會做moveTaskToBack(true);
,但這不是一個解決方案和更多的黑客做它工作。
嘗試使用onResume,以便B在默認情況下出現。將任何相關變量設置爲它們在新活動中的含義。如果你只想從C來的時候想要這個,那麼當C加載時,有一個布爾類型設置爲true,並在onResume或onRestart中檢查它。如果是,則將所有內容設置爲默認/空白,並將布爾值設置爲false。如果沒有,加載它是如何(這是如果他們打回家,回到應用程序,基本上)。我不是在我的辦公桌,但我想你會想:
@Override
public void onResume() {
super.onResume();
if(fromC == true){
//Set all variables to load default dictionary
fromC = false;
}
}
}
這應該使正本提單的行爲像一個新的B.
或者相反,你能做到這一點的簡單方法,當你打電話的意圖來加載一個新型B這樣的:
startActivity(getIntent());
finish();
這會讓有隻有一個B.使當你回到其加載爲空白是有點不同,需要類變量,或者我想到的其他一些棘手的技巧。這就像你想要做的事情:.zip of small sample
如果你可以把你的代碼改寫成幾乎這樣的東西(如果這有什麼意義,你可以使用適當的變量來設置正確的工作) 。
我只是想: A> B> ç< B> C> ç< 如你所說,它終於實現了,你預測。 問題來自當我去到B的新實例,所以: A> B> C> B> ç< 在這種情況下,我想最後的C返回到原來的B,否則我們可能會產生一個巨大的後鏈。 編輯:(試圖格式化這個權利,有問題) – Jdban101
我明白你的意思,但爲什麼你想要一個新的B實例呢? – Rob
B基本上是主要的字典頁面,你可以在開始時瀏覽所有的單詞。如果您搜索,則會再次打開B並向您顯示與該搜索匹配的所有單詞(例如,您搜索'a'並且所有a都會彈出並且您可以滾動瀏覽它。我想回到所有單詞的完整滾動頁面是最好的,而不是退出並重新打開,如果你想再次頁面。 – Jdban101
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (splash.sdk < 5 && keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
//This will make the back button exit the app to the home screen.
@Override
public void onBackPressed() {
moveTaskToBack(true);
return;
}
您可以設置一個Intent
標誌來執行此操作。說你在Activity
C,你想打電話給Activity
B:你給Intent
添加一個標誌叫做FLAG_ACTIVITY_CLEAR_TOP
。所以:
class C extends Activity {
//...
private void gotob() {
Intent go = new Intent(this, B.class);
go.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(go);
}
//...
}
這樣做是要麼去在後面堆棧B(和明確的一切離頂部)的頂部實例,或者如果沒有創建一個新的實例。我還沒有制定出是否有辦法通過啓動標誌來做到這一點 - 雖然有一些類似的模式,但我不認爲它們是完全相同的。
您是否看過[這裏]概述的不同launchModes(http://developer.android.com/guide/topics/manifest/activity-element.html#lmode)? singleTop,singleTask或singleInstance模式可能會提供您正在查找的行爲。 – theisenp
我其次。看看不同的標誌,看看他們是否可以提供幫助。雖然如果你從C打回來,它不應該把你帶到原來的B嗎? – Rob
除了當我嘗試從C啓動一個新的B時,它們會回到原始的B,我想要一個以這種方式啓動的新創建的標誌,但是原來的標誌會在後退按下時發生。 – Jdban101