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(); }

当按下后退button时如何用片段Areplace片段C?

我的场景:活动1由片段A-> B-> C组成。所有片段都使用此代码添加: FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.content, fragment, TAG); ft.addToBackStack(TAG); ft.commit(); 现在,从片段C中,我想直接返回到片段A.因此,我已经在添加片段C的同时对ft.addToBackStack(TAG)进行了评论。因此,当从CI中按回button时,直接在屏幕上获取片段A. 然而,片段C不被A取代。事实上,这两个片段都是可见的。 我如何解决这个问题?