标签: back-stack

防止同一碎片堆叠多次(addToBackStack)

我有一个Activity与三个片段可以打电话给他们一个,Ç.Fragment 一个被称为在活动onCreate().

FragmentA fragA = new FragmentA();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.activity2_layout, fragA, "A");
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

当按下某些按钮时,会被片段BC替换,并且FragmentTransaction会调用addToBackStack().

FragmentB fragB = new FragmentB(); //or C
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.activity2_layout, fragB, "B");  //or C
transaction.addToBackStack("B"); //or C
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

但是让我说我连续三次打电话给Fragment B,我怎么能阻止它自己堆叠呢?同时我希望这是可能的:B调用> C调用> B调用 - 但是当我尝试返回时我希望B只打开一次(C < B)而不是(B < C < B) .所以基本上删除第一个backStack与新的.

android fragment android-fragments back-stack fragment-backstack

7
推荐指数
1
解决办法
6218
查看次数

处理 Flutter 应用程序中的 Activity 被破坏

当在Android开发者选项中打开“不要保留活动”时,Flutter应用程序的导航路线堆栈似乎被清除,并且Android应用程序像一个新的开始一样显示第一个屏幕。

在 Flutter Android 应用程序中保留或恢复导航路由堆栈的正确方法是什么?

navigation android dart back-stack flutter

7
推荐指数
1
解决办法
1153
查看次数

在Android中修改后栈

我想在我的Android应用程序中修改后台堆栈:

现在,这是流程:

A - > B - > C - > D - > E - > F.

我希望能够修改后台堆栈,这样当用户进入活动F时,D和E将从堆栈中删除.因此,如果用户击中背部,则流量为F - > C.

此外,从F,用户能够进入活动B,这也应该擦除C,D,E和F.

我已经看到了一些关于能够清除堆栈或删除顶部项目的信息,但是我想在触发活动时从堆栈中删除一些项目.

感谢任何帮助,非常感谢.

android back-stack

6
推荐指数
1
解决办法
3376
查看次数

如何从最近排除出口活动?

我有一个带有导出活动的应用程序,可以从其他应用程序调用(特别是共享操作 - android.intent.action.SEND)

如何将出口活动排除在最近?

我没有看到设置FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS标志的方法,因为它是从外部调用的.

我想这样做的原因是因为这个意图成为我的活动堆栈中的最后一个,因此当点击最近的时候,正在重新共享文件而不是弹出的主要活动.

注意:android:launchMode="singleTask"在特定情况下解决问题,仅在另一个活动位于顶部的情况下.但是,这不是一个选项,因为它会中断用户任务流,如果根目录中没有其他应用程序的活动,则无法正常工作.

android android-activity back-stack android-recents

6
推荐指数
1
解决办法
3133
查看次数

自定义TaskStack从通知中完成父活动

我在使用TaskStack通知时遇到问题.我正在尝试在点击通知时保持我的应用程序的导航流程.

我的应用程序的导航风格如下:

PrincipalActivity(父母)→ SecondaryActivity(孩子)

有时,GCM服务可以推送启动的通知SecondaryActivity.PrincipalActivity可能存在或不存在的实例,所以我从a实现自定义PendingIntent TaskStack(见下文).这在PrincipalActivity暂停或关闭时有效.

当用户PrincipalActivity在前台点击通知时出现问题:PendingIntent调用PrincipalActivity.onDestroy()并创建丢失所有数据的新堆栈活动.

服务推送通知:

Intent notificationIntent = new Intent(context, SecondaryActivity.class);

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(SecondaryActivity.class);
stackBuilder.addNextIntent(notificationIntent);

PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,
        PendingIntent.FLAG_UPDATE_CURRENT);
mNotifyBuilder.setContentIntent(pendingIntent);

mNotificationManager.notify(id, mNotifyBuilder.build());
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中

<activity
    android:name="com.hitsbam.geotalk.Principal"
    android:configChanges="orientation|screenSize|keyboardHidden"
    android:label="@string/principal_titulo"
    android:launchMode="singleTask" />

<activity
    android:name="com.hitsbam.geotalk.Secondary"
    android:configChanges="orientation|screenSize|keyboardHidden"
    android:label="@string/peticiones_titulo"
    android:parentActivityName=".Principal" />
Run Code Online (Sandbox Code Playgroud)

我试着用的标志PendingIntent(FLAG_UPDATE_CURRENT,FLAG_ONE_SHOT),并用不同的实验launch_mode在清单(为活动singleTask,singleTop,singleInstance),但没有运气.

TaskStack当父级已经在前台并且不丢失数据时,如何使用activity和parent 创建上述自定义?(理想情况下,重用堆栈中的活动?)

android android-notifications android-pendingintent back-stack

6
推荐指数
0
解决办法
564
查看次数

如何像Splash屏幕一样只运行一次活动

在我的应用程序中,我想在第一次运行时运行一次启动画面,但问题是我已经放在Manifest这一行:android:noHistory="true"如果我按下后退按钮并退出应用程序但是请注意该应用程序仍在后台运行,当我按下应用程序图标时,它会再次返回到启动画面,然后是我的注册页面.我想在重新打开我的应用程序时直接重定向到注册页面.

我该怎么做呢?提前感谢任何建议.

android android-manifest android-intent android-activity back-stack

6
推荐指数
2
解决办法
2万
查看次数

Android:Dialog Fragment和Backstack问题

所以我要说我有以下片段:

Fragment1 Fragment2 DialogFragment Fragment3 Fragment4

让我们说我转到下面的片段,每个fragmetn被添加到后栈:

Fragment1 -> Fragment2 -> DialogFragment -> Fragment3 -> Fragment4
Run Code Online (Sandbox Code Playgroud)

如果我单击BACK按钮,这通常应该转到Fragment3,而是显示DialogFragment.

以下是我使用的片段交易:

Fragment1 - > Fragment2

FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
ft.replace(R.id.mainContentHolder, new Fragment2(), "Fragment2");
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)

Fragment2 - > DialogFragment

FragmentTransaction ft2 = getFragmentManager().beginTransaction();
ft2.setCustomAnimations(R.anim.flipp_in,R.anim.flipp_static);
ft2.add(R.id.mainContentHolder, new DialogFragment(), "DialogFragment");
ft2.addToBackStack(null);   
ft2.commit();
ft2.hide(Fragment1.this);
Run Code Online (Sandbox Code Playgroud)

DialogFragment - > Fragment3

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.mainContentHolder, new Fragment3(), "Fragment3");
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)

Fragment3 - > Fragment4

FragmentTransaction ft = getFragmentManager().beginTransaction();                                           
ft.replace(R.id.mainContentHolder, new Fragment4(), "Fragment4");
ft.addToBackStack(null);                        
ft.commit(); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments back-stack fragmenttransaction

6
推荐指数
1
解决办法
1765
查看次数

共享时"FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET"的目的是什么?

我已经阅读了http://developer.android.com/guide/components/tasks-and-back-stack.html,我已查阅了相关文档FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET,但我仍然不明白为什么谷歌的员工决定将其包括在内它在他们关于分享的博客文章中.

http://android-developers.blogspot.com/2012/02/share-with-intents.html

这是他们的代码片段:

Intent intent=new Intent(android.content.Intent.ACTION_SEND);
intent.setType("text/plain");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

// Add data to the intent, the receiving app will decide what to do with it.
intent.putExtra(Intent.EXTRA_SUBJECT, “Some Subject Line”);
intent.putExtra(Intent.EXTRA_TEXT, “Body of the message, woot!”);
Run Code Online (Sandbox Code Playgroud)

文件说:

If set, this marks a point in the task's activity stack that should be cleared when the task is reset...
Run Code Online (Sandbox Code Playgroud)

我仍然不确定这面旗帜.我不确定我是否可以考虑将其包含在我的share()方法中,但如果Google在博客文章中使用它,那么我确信他们知道这种情况会发挥作用.提前致谢.

android android-intent back-stack android-sharing

6
推荐指数
2
解决办法
5953
查看次数

没有从Notification PendingIntent创建Android后台堆栈

如果在遵循通知时应用程序不在内存中,我就会遇到问题.不会创建backstack.我按照开发人员指南按照步骤操作.请告诉我我错过的位,否则我将必须通过我的所有意图路由HomeActivity,以便按照以下意图手动创建backstack.

AndroidManifest.xml:

<activity
    android:name=".activity.HomeActivity"
    android:clearTaskOnLaunch="true"
    android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
    android:icon="@drawable/actionbar_logo"
    android:label="@string/activity_label_home"
    android:launchMode="singleTask"
    android:parentActivityName=".activity.Start"
    android:windowSoftInputMode="stateAlwaysHidden" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".activity.Start" />
    <intent-filter>
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
<activity
    android:name=".activity.ChatActivity"
    android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
    android:label="@string/activity_label_in_chat"
    android:parentActivityName=".activity.HomeActivity"
    android:windowSoftInputMode="stateHidden"
    tools:ignore="UnusedAttribute" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".activity.HomeActivity" />

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />

        <data android:mimeType="vnd.android.cursor.item/vnd.myapp.chat" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

建筑通知:

final String chatId = cursor.getString(cursor.getColumnIndexOrThrow(MessageColumns.CHAT));
final Intent chat = new Intent(c, ChatActivity.class);
chat.putExtra(ChatActivity.EXTRA_CHAT_ID, chatId);
PendingIntent intent = TaskStackBuilder.create(c).addNextIntentWithParentStack (chat).getPendingIntent (0, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder (c);
final NotificationManagerCompat …
Run Code Online (Sandbox Code Playgroud)

notifications android back-stack

6
推荐指数
1
解决办法
2447
查看次数

尝试避免向backStack添加两次相同的片段,popBackStackImmediate总是返回false

我正在尝试使用此方法避免向backStack添加相同的片段:

public static void replaceFragment(FragmentManager fragmentManager, Fragment fragment, Boolean addToBackStack) {
        String backStateName = fragment.getClass().getName();
        boolean fragmentPopped = fragmentManager.popBackStackImmediate(backStateName, 0);

        if (addToBackStack && !fragmentPopped && fragmentManager.findFragmentByTag(backStateName) == null) {
            fragmentManager
                    .beginTransaction()
//                    .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, android.R.anim.fade_in, android.R.anim.fade_out)
                    .replace(R.id.container, fragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .addToBackStack(backStateName) // was 'backStateName'
                    .commit();
        } else {
            if (!addToBackStack)
                fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            fragmentManager
                    .beginTransaction()
//                    .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, android.R.anim.fade_in, android.R.anim.fade_out)
                    .replace(R.id.container, fragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .disallowAddToBackStack()
                    .commit();
        }
    }
Run Code Online (Sandbox Code Playgroud)

导航抽屉包含:profilePhoto打开的ImageView和打开的ProfileMainFragment几个类别MainFragmentCategory.Boolean addToBackStackfalse当片段从choosen navigationDrawerMenu并且true …

android android-fragments back-stack android-studio

6
推荐指数
1
解决办法
2945
查看次数