当前位置: 首页 > 面试题库 >

上下文需要FLAG_ACTIVITY_NEW_TASK,但我已经设置了该标志

沈飞翔
2023-03-14
问题内容

我为我所在的公司创建了一个通用的可重用类,以创建一些通用的界面元素。

该类采用与构造中相同的单个参数:应用程序上下文。

其中一种方法,ContentClickableRowWithIcon可让您传递用作点击动作的意图。

这是完整的方法声明:

public LinearLayout ContentClickableRowWithIcon(Drawable icon, String title, Intent i, final Boolean chooser)

onClickEvent中使用的最后一个属性确定是调用选择器还是直接进入意图。

public LinearLayout ContentClickableRowWithIcon(Drawable icon, String title, Intent i, final Boolean chooser) {

    LinearLayout ll = new LinearLayout(mContext);

    // ..  LinerLayout construction, has nothing to do with the action

    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this is apparently getting ignored... (ps: i've tried i.setFlags as well)

    final Intent intent = i;

    ll.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {

            if(chooser)
                mContext.startActivity(Intent.createChooser(intent, "Complete With...")); // crashes here with: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
            else
                mContext.startActivity(intent); // this works fine

        }
    });

    return ll;
}

如评论中所述,只要我不提供使用选择器的功能,一切都可以正常工作(此列表中的所有内容都会获得一个新的活动标志,我对此很清楚,并且会在发现此问题时进行清理)

当我这样做的时候,抛出异常: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

我的想法用光了…

///编辑::值得注意的是,在调试时,当到达使用onClick动作中的意图的时间时,将Intent中的flags属性设置为268435456addFlags和268435456setFlags。


问题答案:

问题已解决,我认为这只是“操作顺序”场景的情况

这使这件事情起作用的异端是什么:

    ll.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {



            if(chooser) {
                Intent intent = Intent.createChooser(i, "Complete With");
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mContext.startActivity(intent);
            } else
                mContext.startActivity(i);

        }
    });

还向方法声明中的参数添加了“最终”修饰符

public LinearLayout ContentClickableRowWithIcon(Drawable icon, String title, final Intent i, final Boolean chooser)


 类似资料: