Articles of back stack

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

我完全同意下面的导航 想象一下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一样)

如果不存在,如何将BackStackEntry添加到BackStack

我已经添加了自定义键盘到我的片段,现在我想实现closures键盘时,按下。 class CustomKeyboard { public void init(Context context) { //… FragmentManager fragmentManager = ((Activity) context).getFragmentManager(); boolean fragmentPopped = fragmentManager.popBackStackImmediate(TAG, 0); if (!fragmentPopped) { FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.addToBackStack(TAG); fragmentTransaction.commit(); } } } 问题是每次当屏幕旋转的init调用,因为我创buildCustomKeyboard public void onActivityCreated(final Bundle savedInstanceState) fragmentPopped=false ,所以CustomKeyboard可以多次添加到BackStack。 我的问题: 如果不使用getBackStackEntryCount()方法,是否可以添加BackStackEntry到BackStack?

从configuration改变片段后,现在共享FrameLayout?

应用程序问题: 当方向改变时,应用程序遇到这些问题: 现在FragmentA和FragmentC都占据了FrameLayout容器。 什么工作:一切工作,因为我想…在旋转屏幕之前。 活动描述简介: EditActivity目的:编辑collections和项目字段。 以编程方式创build以下活动片段: FragmentA – 用于编辑收集字段的片段 FragmentB – collections中物品的ListFragment FragmentC – 用于编辑项目字段的片段。 初始布局:FragmentA位于FragmentB的顶部,每个都在自己的FrameLayouts中。 当用户单击FragmentB的列表视图项时:用FragmentCreplaceFragmentA以允许用户编辑该项的字段。 现在FragmentC坐在FragmentB上面。 这似乎是一个非常简单的概念:活动的顶部是用于编辑整个集合的属性或集合中的单个项目。 我不觉得我做了什么奇妙的布局,所以我有点困惑,一个简单的旋转的电话(模拟器)导致这些问题,我有这样一个卑鄙的时间试图解决。 为什么Android的片段指南的例子不适合我:他们的例子是非常像我在做什么,但他们的细节片段要么是在一个新的活动打开,要么在当前的活动在自己的框架,他们不做任何交换片段,所以我不能收集他们将如何使用onSaveIstanceState来保留可见的片段,然后在onCreate中使用该信息来重新创build在方向改变之前存在的UI。 编辑:通过放大和放入XML片段中的一个问题,解决了永久旋转“加载…”的问题。

Android深度链接 – 后退堆栈

我正试图在我的Android应用程序中实现深层链接。 我一直在遵循这个指南 。 我有一个从Android清单中启动并意图过滤的Android活动: <activity android:name=".MyActivity" android:parentActivityName=".MainActivity" > <intent-filter android:label="@string/filter_title_deep_link"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="com.example" /> </intent-filter> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity"/> </activity> 我从adb产生这个意图: adb shell am start -W -a android.intent.action.VIEW -d "com.example://test" com.example 正在使用正确的意图数据创build活动并按预期运行。 但是,按下后退button,应用程序退出。 我期待的是使用MainActivity构buildback栈,正如Android清单中的parentActivityName所指定的parentActivityName 。 显然情况并非如此。 在这种情况下,如何将父级活动添加到后退堆栈? 我想知道是否可以使用如通知的上下文中所示的TaskStackBuilder ,但不知道如何工作。 也许我应该有一个中间的活动来构build主要的活动,使用像这样的东西: TaskStackBuilder.create(this) .addParentStack(MyActivity.class) .addNextIntent(new Intent(this, MyActivity.class)) .startActivities(); ?

碎片PopBackStack

我遇到一个奇怪的问题,同时使用Fragments并将其popup。 我有一个片段活动: 第一步:我在起始名为Fragment A的Activity的onCreate中附加一个Fragment,如下所示: 这是片段活动的创造 @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之后,我附上用下面的代码replace了片段: Fragment_More moreFragment = new Fragment_More(); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().replace(R.id.frameContent, moreFragment).addToBackStack("more").commit(); 第三步:在那之后,我再以同样的方式在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 fm = […]

当ViewPager中的片段保留在BackStack中时,重新加载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 […]

Android:返回上一个片段

我已经实现了导航抽屉,它是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 Keybutton上的应用程序中使用这样的内容 片段_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(); }

活动破坏后的活动背后的不良行为

我有两个活动, 让我们说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)当用户在设备的设置中select“开发者”选项中的“不保留活动”时,也会出现同样的问题。 我一直在寻找解决这个问题很长一段时间,但我无法find一个正确的答案。 处理这种情况的最佳方法是什么? 这是一个Android的错误? 这个问题应该有一些解决办法。 请帮帮我。