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();
你碰上,你有多个片段,在返回堆栈相同标签的问题?如果为标签生成随机名称,我很好奇。 –
我只是设置了一个创建标签的约定,以确保它们在任何可能的背堆栈排列中都是唯一的。在我的情况下,由于应用程序的设计,只使用片段的类名就足够了。生成一个随机标签应该可以工作,只要你可以保证标签永远不会在后退堆栈中被复制。 –
同样在我的情况下,我只需要知道是否有四种片段类型当前处于活动状态,因为像您的应用程序一样,他们需要知道后退按钮是否已被按下。所以我的大部分片段交易甚至都没有指定标签。 –