我遇到了同样的问题,也找不到任何解决方案。虽然这个问题有点老了,但我的解决方案可能会对某人有所帮助。我不确定这是否是最好的解决方案,但它对我有用。
所以首先你需要添加变量来存储之前检查过的项目的ID:
private int previousItemChecked;
最初将其设置为您的默认选中项:
if (savedInstanceState == null) {
selectItem(0);
previousItemChecked = 0;
}
然后编辑片段事务,使 backstack 中的事务标题包含转换为字符串的先前检查项目的位置,并在事务完成后将变量 previousItemChecked 设置为当前检查的项目 ID:
fragmentManager.beginTransaction().replace(R.id.content_frame, selectedFragment).addToBackStack(""+previousItemChecked).commit();
previousItemChecked = mDrawerList.getCheckedItemPosition();
最后在onBackPressed方法中,你需要获取之前分配给fragment transaction的字符串,将其解析为int并根据获得的id更新drawer:
@Override
public void onBackPressed() {
if(fragmentManager.getBackStackEntryCount() > 0) {
String title = fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount()-1).getName();
int pos = Integer.parseInt(title);
previousItemChecked = pos;
mDrawerList.setItemChecked(pos, true);
}
super.onBackPressed();
}
我从我在 Android Studio 中创建的应用程序中获取了代码,因此它不适用于 Xamarin,但如果您更新代码,它也应该可以使用它。这里重要的是它是如何完成的。我希望答案是可以理解的,并且会对某人有所帮助。