Activity 从片段启动时启动多次

Activity starts multiple times when started from a Fragment

我有一个片段,当按钮 clicked.The activity 在横向模式下打开时,它会启动一个新的 activity。现在,activity 被多次启动。如果我从另一个 activity 启动 activity,则行为正常并且工作正常。多重 activity 渲染仅在从 Fragment

开始时发生

知道如何阻止这种行为吗?

代码如下:-

void teaserVideo_Touch(object sender, View.TouchEventArgs e)
        {
            Intent mIntent = new Intent();
            mIntent.AddFlags(ActivityFlags.ReorderToFront);
            mIntent.AddFlags(ActivityFlags.NewTask);
            mIntent.SetClass(this.Activity, typeof(VideoActivity));
            Activity.StartActivity(mIntent);

        }

看方法名,"touch"表示当手指触摸视频时会调用多次。

您可以将其设置为仅识别真值 "click",或者简单地使用如下标志捕获第一个事件:

boolean intentLaunched = false;    

void teaserVideo_Touch(object sender, View.TouchEventArgs e)
    {
        if(!intentLaunched){
            intentLaunched = true;

            Intent mIntent = new Intent();
            mIntent.AddFlags(ActivityFlags.ReorderToFront);
            mIntent.AddFlags(ActivityFlags.NewTask);
            mIntent.SetClass(this.Activity, typeof(VideoActivity));
            Activity.StartActivity(mIntent);
        }

    }

一定要在 onResume() 或其他东西中将 "intentLaunched" 重置为 false

无论您是从 Activity 调用还是从 Fragment 调用,Activity 都必须启动一次。 问题出在代码中:

mIntent.AddFlags(ActivityFlags.ReorderToFront); 

此处 ActivityFlags.ReorderToFront 将从 android 堆栈调用已创建的 activity 到前面。

mIntent.AddFlags(ActivityFlags.NewTask);

这里 ActivityFlags.NewTask 新的 activity 将在您的 android 堆栈中开始。 因此,您将最终调用 Activity 的多个实例。 只需将您的代码更改为以下内容:

        Intent mIntent = new Intent();
        mIntent.AddFlags(ActivityFlags.ReorderToFront); 
        mIntent.SetClass(this.Activity, typeof(VideoActivity));
        Activity.StartActivity(mIntent);