gpt4 book ai didi

android - 使用抽屉导航处理 fragment 返回堆栈

转载 作者:可可西里 更新时间:2023-11-01 19:07:17 34 4
gpt4 key购买 nike

我正在实现抽屉导航并且运行良好。所以我在点击抽屉导航时调用 fragment ,它也在工作,而且我从主页 fragment 调用另一个 fragment 并维护每个 fragment 的返回堆栈,但问题是从我无法去的子 fragment 中按下主页 fragment ,刚刚退出应用程序。我不想要这个。我想要什么 点击

Navigation Drawer->HomePageFragment->AnotherChild Fragment(On List Item click of HomePageFragment)

但是在没有进入 Homepage fragment 的情况下按下后退直接退出应用程序。这是我的代码:(在带抽屉导航的 fragment Activity 中)

class SlideitemListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {

updateDisplay(position);
}

}

private void updateDisplay(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new ScheduleFragment();
break;
case 1:
fragment = new Result_Fragment();
break;
case 2:
fragment = new Live_Match_Fragment();
break;
case 3:
// fragment = new Live_Match_Fragment();
break;

case 4:
fragment = new Team_Fragment();
break;
default:
break;
}

if (fragment != null) {

fragmentManager = getFragmentManager();
fragmentManager.popBackStackImmediate("0", 0);
int count = fragmentManager.getBackStackEntryCount();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction.replace(R.id.frame_container, fragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(String.valueOf(count)).commit();
Log.e("Count in Activiy", ""+count);

// update selected item and title, then close the drawer
setTitle(menutitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}

}

现在在 FragmentActivity 中的 BackPressed() 中。

@Override
public void onBackPressed() {
if (fragmentManager.getBackStackEntryCount() <= 1) {
finish();

return;
}
super.onBackPressed();
}

现在在 Listview 项点击时从 HomePage fragment 调用另一个子 fragment 。

 team_lv.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
TeamDetailFragment myDetailFragment = new TeamDetailFragment();
FragmentManager fragmentManager = getFragmentManager();
int count = fragmentManager.getBackStackEntryCount();
Log.e("Count in Fragment", "" + count);
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction
.replace(R.id.frame_container, myDetailFragment)
.setTransition(
FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(String.valueOf(count)).commit();

}
});

所以有人知道然后帮助我。帮助将不胜感激。

最佳答案

android 中的嵌套 fragment 存在问题 https://code.google.com/p/android/issues/detail?id=40323

如果事务在嵌套的 fragment 中,Android 就不能很好地处理回按。为了超越这个,我在我的 Activity 中使用了以下修复

@Override
public void onBackPressed() {
// If the fragment exists and has some back-stack entry
if (myFragment != null && myFragment.getChildFragmentManager().getBackStackEntryCount() > 0) {
// Get the fragment fragment manager - and pop the backstack
myFragment.getChildFragmentManager().popBackStack();
}
// Else, nothing in the direct fragment back stack
else {
// Let super handle the back press
super.onBackPressed();
}
}

关于android - 使用抽屉导航处理 fragment 返回堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23293245/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com