1
對於我的應用程序,某些片段需要用戶在顯示對話框之前在對話框中輸入pin。我有一個BaseFragment類,所有其他片段擴展哪些商店,如果需要引腳。我現在的問題是處理後退按鈕,就好像用戶試圖返回一個片段,它需要首先顯示引腳對話所需的引腳。Android peek backstack without popping
當前我重寫了onBackPressed(),在這個函數中,如果popBackstack()被調用,所以我可以檢查是否應該顯示pin對話框,以查看哪個片段將被恢復。下面是我當前的代碼popFragment回來null:
@Override
public void onBackPressed() {
if(getSupportFragmentManager().findFragmentById(R.id.fragment_container) instanceof BaseFragment) {
BaseFragment frag = (BaseFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
int index = getSupportFragmentManager().getBackStackEntryCount() - 1;
Log.e("Back stack", Integer.toString(index));
FragmentManager.BackStackEntry backEntry = (FragmentManager.BackStackEntry) getSupportFragmentManager().getBackStackEntryAt(index);
BaseFragment popFragment = (BaseFragment) getSupportFragmentManager().findFragmentById(backEntry.getId());
BaseFragment.checkAuth(this, frag, popFragment, new NavigationCallback((AppCompatActivity) this));
} else {
super.onBackPressed();
}
} else {
super.onBackPressed();
}
}
我檢查過,如果backEntry爲空,它不是。 backEntry.getId()也返回值爲1,所以我不知道爲什麼findFragmentById()然後爲空。我也並不認爲它與我如何展示片段做的,但這裏是我的代碼,以及:
FragmentManager fragManager = mActivity.getSupportFragmentManager();
FragmentTransaction transaction = fragManager.beginTransaction();
transaction.replace(R.id.fragment_container, mFragment);
transaction.addToBackStack(null);
transaction.commit();
你碰上,你有多個片段,在返回堆棧相同標籤的問題?如果爲標籤生成隨機名稱,我很好奇。 –
我只是設置了一個創建標籤的約定,以確保它們在任何可能的背堆棧排列中都是唯一的。在我的情況下,由於應用程序的設計,只使用片段的類名就足夠了。生成一個隨機標籤應該可以工作,只要你可以保證標籤永遠不會在後退堆棧中被複制。 –
同樣在我的情況下,我只需要知道是否有四種片段類型當前處於活動狀態,因爲像您的應用程序一樣,他們需要知道後退按鈕是否已被按下。所以我的大部分片段交易甚至都沒有指定標籤。 –