Articles of back stack

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 […]

如果已经存在于后台堆栈中,则恢复活动而不是启动

比方说,经过很多步骤,我有一个Activity_1 Activity_2 > Activity_3 ….我更改了与Activity_1相关的一些数据并使用它来调用它 Intent intent = new Intent(Activity_n.this, Activity_1.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 刷新内容。 但是后来我可以一直回到我开始的Activity_1 ,它有旧的数据。 相反,我希望使用上面的代码调用初始Activity_1的onResume() 。 或适当的旗帜 FLAG_ACTIVITY_CLEAR_TOP 考虑由活动组成的任务:A,B,C,D。如果D调用具有解析为活动B的组件的Intent的startActivity(),那么C和D将完成并且B接收给定的Intent,从而导致现在堆栈是:A,B。 那是’文档说的,但不是我得到的。

当活动被破坏时,活动背叛的不当行为

我有两个活动; 让我们说A和B.在activity A有一个广播接收器注册了侦听将完成活动A的特定事件。我在onCreate()注册广播接收器,并在activity A onDestroy()中销毁它。 为简单起见, activity B有一个名为“销毁活动A”的button 。 当用户点击button ,应销毁activity A 通常所有这些都运行顺利,没有任何问题,但问题出现在以下场景中: 1)假设我在activity B ,我按Home键将应用程序移动到后台然后如果我使用其他资源繁重的应用程序,Android系统将杀死我的应用程序以释放内存。 然后,如果我从最近的任务中打开我的应用程序,将恢复activity B ,并且将调用onCreate() , onResume()等方法。 现在我按下button来销毁activity A ,但活动A已被销毁,因此activity A的onCreate() , onResume()等方法将不会被调用,除非我按下back button进入activity A 因此, broadcast receiver未注册以监听事件。 2)当用户在设备的设置中从Developer选项中选择“Do not keep activities”时,会出现同样的问题。 我一直在寻找解决这个问题很长一段时间,但我无法find合适的答案。 处理此方案的最佳方法是什么? 这是Android的错误吗? 这个问题应该有一些解决方案。 请帮帮我。

根据指南处理“向上”导航的正确方法

我完全同意下面的导航 想象一下Book的细节是在BookDetailActivity的不同实例中完成的。 在book2细节中按下之前的堆栈是: BookDetailActivity(Book 2 – 你在这里) BookDetailActivity(Book 1) AllBooksActivity 如果我按照指导方针,我将使用: Intent parentActivityIntent = new Intent(this, AllBooksActivity.class); parentActivityIntent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(parentActivityIntent); finish(); 但是这个代码的大问题是BookDetailActivity(Book 1)仍然活着! 在“向上”之后按下返回button将带来书1的细节。 我怎样才能杀掉原来的AllBooksActivity和我按下的活动之间的所有BookDetailActivity ?

按Home键时如何清除活动历史堆栈?

我正在写一个有两个“模式”的应用程序; 一个查看模式和一个编辑模式。 应用程序公开了两个主要/启动活动(比如A和D ),它们又有自己的活动链(分别是B , C和E , F )。 两个入口点活动A和D将在主屏幕中显示具有单独标签的两个图标,并且两个链条永远不会交叉,即,一旦以活动A的视图模式启动应用程序,您可以前后走动的唯一路线是A , B , C ,如果您使用活动D在编辑模式下启动应用程序,唯一可用的活动链是D , E , F 。 现在,我的问题是,如果启动应用程序,例如查看模式(活动链A , B , C ),并按任何活动链中的主页button,我回到主屏幕(当然),但如果我以编辑模式(活动链D , E , F )重新启动应用程序当按下主页button(即错误链中的某个活动)时,我得到了正在进行的活动 – 而不是编辑模式的预期入口点; 活动D。 我如何解决这个问题? 我已经尝试过android:noHistory , android:clearTaskOnLaunch和AndroidManifest.xml中涉及活动的其他属性的各种组合。 但他们似乎只影响到活动,而不是整个链条。 我希望在主页button被按下时从历史堆栈中移除整个活动链( A , B , C或D , E , F ),但仍然保持堆栈原封不动,而我仍然在链中(我想能够按下活动B的后退button并进入活动A )。

清除活动回栈

我从活动A-> B-> C-> D-> E ..从D-> E开始时,应该没有活动堆栈,但是,用户可以使用后退button从D转到C(没有刷新Activity C,就像正常的后退function一样)