Articles of back stack

如何从FragmentManager中删除以前的堆栈条目?

我有一个活动,我使用以下方法切换片段: public void setCurrentFragment(Fragment fragment) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setCustomAnimations(R.anim.slide_left_right_in, R.anim.slide_left_right_out, R.anim.slide_right_left_in, R.anim.slide_right_left_out); transaction.replace(R.id.contentFrameLayout, fragment, Integer.toString(fragmentId++)); transaction.addToBackStack(Integer.toString(fragmentId)); transaction.commit(); } 我的导航堆栈如下所示: N-2 – > N-1 – > N. 当某个片段N’打开’时,我想要从后台取出前一个(N-1),所以当我按’后’时我想要恢复N-2片段。 当我在N片段中调用FragmentManager.popBackStack(..)时,它会删除N和N-1片段。 在切换到N片段之前,我试图在N-1片段中调用popBackStack(..)。 但是在那种情况下,N-2片段被恢复,并且仅在显示N片段之后。 我的问题是:有没有办法从backstack中删除以前的片段而不popup当前片段?

获取后栈中的最后一个片段

我看过这篇文章,但这里发布的解决方案对我不起作用: 在backstack中获取最新的片段 当我替换另一个片段时,我使用: FragmentManager manager = getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); ft.replace(android.R.id.tabcontent, fragment, tag); ft.addToBackStack(null); ft.commit(); 所以,请注意我正在使用标签来检测任何片段。 我的问题尤其如下: 假设我有fragment_A,fragment_B和fragment_C。 我可以从fragment_A或fragment_B获取fragment_C,并且根据调用的父级,我必须做一些特别的事情。 所以,我再次需要恢复后堆栈中的最后一个FRAGMENT。 当我尝试做: FragmentManager fm = getSupportFragmentManager(); for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){ String ide = fm.getBackStackEntryAt(entry).getName(); Log.i("TAG", "Found fragment: " + ide); } 我得到零。 如果我使用getId()代替,我得到数字,所以我尝试做: int id = fm.getBackStackEntryAt(entry).getId(); Fragment fragment = fm.findFragmentById(id); […]

Fragment PopBackStack

我遇到一个奇怪的问题,同时使用Fragments并popup它们。 我有一个片段活动: Step1:我在起始命名片段A中的那个Activity的onCreate中附加了一个片段: 这是onCreate of Fragment Activity @Override protected void onCreate(Bundle savedBundleState) { super.onCreate(savedBundleState); setContentView(R.layout.activity_base_new); Fragement_Home home = new Fragement_Home(); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().add(R.id.frameContent, home).addToBackStack(“home”).commit(); } 步骤:2之后我附加了使用以下代码替换Fragment: Fragment_More moreFragment = new Fragment_More(); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().replace(R.id.frameContent, moreFragment).addToBackStack(“more”).commit(); 第3步:之后,我再次以相同的方式在Fragment_More上添加了一个片段: Fragment_AboutRockstand termsConditions = new Fragment_AboutRockstand(); getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.frameContent, termsConditions).addToBackStack(“about_rockstand”).commit(); 这是我的片段活动onBackPressedButton Lisetener: @Override public void onBackPressed() { FragmentManager […]

从backstackpopup时不会调用片段的onResume()

嗨,我正在开发我正在使用的Android应用程序我正在使用单个Activity和3个片段。 所以考虑我有3个片段AB C.当我从A切换到B时,我将Fragment添加到backstack并且将B和C添加到C.现在当我从C点击它时它向我显示B和类似的B到A. 但事实是,当我从C到B或B到A时,它不会调用onResume()或Fragment任何其他生命周期方法。 我想为每个Fragment做什么我在ActionBar有不同的标题。 所以,在我的代码中,当我从A移动到B或B到c时,我正在更改片段内的活动标题。 但是,当我点击它时它不会改变。 实际问题是什么? 为什么在从backstackpopup后它没有为我的Fragment调用onResume() ? 我该如何解决这个问题? 需要帮忙。 谢谢。

Android Reorder Fragment Backstack

我的导航抽屉中列出了许多页面/片段,用户可能经常在这些页面/片段之间切换,我希望它们在后台堆栈中以便他们可以导航回来,但我只想在后台堆栈中使用每个片段的一个实例用户不必按下疯狂的次数退出应用程序。 我无法弄清楚如何在没有删除页面的情况下有效地“重新排序”后台堆栈。 目前,当我更改页面时,我正在使用此代码更改片段并确保它仅在后面的堆栈中一次 if (mFragMgr == null) { mFragMgr = getSupportFragmentManager(); } String backStateName = fragmentDescriptor.name(); boolean fragmentPopped = mFragMgr.popBackStackImmediate(backStateName, 0); if (!fragmentPopped){ mFragMgr.beginTransaction() .remove((Fragment) mFragment) .replace(R.id.content_frame, (Fragment) mFragment) .addToBackStack(backStateName) .commit(); } 我在onBackPressed中使用此代码 @Override public void onBackPressed() { if (mFragMgr.getBackStackEntryCount() > 0) { mFragMgr.popBackStackImmediate(); } else { super.onBackPressed(); } } 这有效,但这意味着它删除了我不想删除的页面。 例: 当我的用户按照A > B […]

Android:返回上一个片段

我已经实现了Navigation Drawer,它是Activity的子类。 我的应用程序中有很多片段。 我的问题在这里 想象一下有3个片段: Fragment_1:Fragment_2:Fragment_3 当我启动我的应用程序时,Fragment_1被加载当我点击Fragment_1上的一些组件时,我将导航到Fragment_2,依此类推。 就这样 Fragment_1> Fragment_2> Fragment_3 当我从Fragment_2按回键时,我将导航回Fragment_1但是当我从Fragment_3按回键时,我将导航回Fragment_1(而不是Fragment_2) 我在Back Key按下的应用程序中想要这样的东西 Fragment_1 <Fragment_2 <Fragment_3 我使用Fragment,FragmentManager,FragmentTransaction如下: MyFragment fragment = new MyFragment(); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).addToBackStack(null)commit(); 我尝试在我的MainActivity中覆盖onBackPressed(): @Override public void onBackPressed() { getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); int count = getFragmentManager().getBackStackEntryCount(); if (count == 0) super.onBackPressed(); }

noHistory vs finish() – 哪个更受欢迎?

我不希望我的应用程序在按下back按钮时显示少量Activity (例如SplashScreenActivity )。 所以我在我的Manifest.xml中为该Activity使用了noHistory=true ,如下所示: 我也可以在SplashActivity.onPause()方法或我想要的任何地方调用finish() ,而不是设置noHistory ,如下所示: @Override protected void onPause() { super.onPause(); finish(); } 两者都做得很好。 但哪一个更好用,使用noHistory或调用finish() ?

如何在Android应用程序中find后台堆栈活动?

我有一个活动的应用程序返回堆栈A – > B – > C – > D – > E.现在在活动E,我想知道我导航的后台堆栈活动。 我怎么find这个?

从BackStack中保留ViewPager中的Fragment时重新加载WebView

这是包含WebView的基本Fragment的代码。 WebFragment.java public class WebFragment extends Fragment { String TAG = “WebFragment”; private WebView webView; private String currentUrl = “http://www.google.com”; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.webview_layout, null); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); webView = (WebView) getView().findViewById(R.id.helloWebview); initWebView(); webView.loadUrl(currentUrl); } @SuppressLint(“SetJavaScriptEnabled”) private void initWebView() { webView.getSettings().setJavaScriptEnabled(true); webView.addJavascriptInterface(new […]

片段addToBackStack()和popBackStackImmediate()不起作用

我目前正在构建Android应用程序(14 <= SDK <= 21),使用一个ActionBarActivity和更多Fragments ,例如ListFragment和MapFragment ,它们在单个FrameLayout视图中交换。 ActionBarActivity自动替换/提交片段A.然后,当用户点击一个按钮时,托管活动替换/提交一个新的不同片段B.我的目标是让用户在按下后退按钮时返回片段A 。 现在有些代码了。 主要活动 public class MainActivity extends ActionBarActivity implements StopFragment.OnFragmentInteractionListener, StopItemFragment.OnFragmentInteractionListener { … @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fragmentManager = getFragmentManager(); fragmentManager.enableDebugLogging(true); … if (fragmentManager.findFragmentById(R.id.content_frame) == null) { StopItemFragment list = StopItemFragment.newInstance(null); //A – extends ListFragment fragmentManager.beginTransaction() .replace(R.id.content_frame, list) .addToBackStack(null) .commit(); } … @Override […]