![](/img/trans.png)
[英]Android - instead of launch new intent to new class/activity, how go back to open activity/class?
[英]Launch the same activity and then go up. How to preserve intent params?
我正在使用不同的EXTRA參數從ArticleAtivity
啟動相同的ArticleActivity
Intent intent = new Intent(view.getContext(), ArticleActivity.class);
intent.putExtra(ArticleActivity.INTENT_EXTRA_ARTICLE_ID, articleId);
view.getContext().startActivity(intent);
文章可以包含子文章。 我從意圖中使用artileId
來獲取其內容和子文章。 所以我可以這樣深入:
A > A > A > A
然后我需要上去。 像這樣:
A > A > A > A < upBtn < upBtn < upBtn
嘗試使用standrad工具欄上按鈕。 但這使我回到第一個屏幕。 我不需要launchMode="singleTop"
因為我希望用戶能夠逐級返回,並且至少要使每個級別的文章ID保持適度。
我試圖對savedInstanceState
做一些savedInstanceState
,但是當我按下按鈕時, savedInstancedState
在onCreate
始終為null,並且從scrath重新創建了活動。
因此,當我以某種方式按下向上按鈕時,我需要傳遞articleId
。 我該怎么做? 謝謝。
最好的方法是在該activity
調用一個方法 並更新詳細信息 。 更新后,將articleId
保存到ArrayList
然后處理onBackPressed()
彈出最后一個articleId
直到返回為止。
private ArrayList<Integer> articleIds = new ArrayList<>(); //initialize on top
然后,不必再次調用該activity
,而是調用方法來刷新新的詳細信息,然后保存新的articleId
:
initDetails(int articleId) {
articleIds.add(articleId);
//load the new detail with the new article Id...
}
在onBackPressed()
,這是您將回到過去使用的articleIds
的邏輯:
@Override
public void onBackPressed() {
if (!articleIds.isEmpty()) { //check if there's still articleId left to load
initDetails(articleIds.get(articleIds.size() - 1)); //call the init details again with the previous articleId
articleIds.remove(articleIds.size() - 1); //remove the last ID
} else { //call here if this is the last articleId
super.onBackPressed();
}
}
如果有我錯過的事情要解釋,或者有什么令人困惑的地方,請不要猶豫告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.