12

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

该类在构造中采用单个参数:应用程序上下文。

其中一种方法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?

我已经没有想法了...

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

4

3 回答 3

29

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

继承人是什么让这件事起作用:

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

        }
    });

还在方法声明的参数中添加了“final”修饰符

public LinearLayout ContentClickableRowWithIcon(Drawable icon, String title, final Intent i, final Boolean chooser)
于 2013-01-25T20:25:40.507 回答
1

实际上,您的异常意味着您使用的是 Not Activity Context。它可以从应用程序上下文中调用。检查您是否在 Activity 上下文中,因为这不是服务

于 2016-08-12T14:36:34.213 回答
0

我修复了它,将标志添加到选择器意图

Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND)
            .setType("text/plain")
            .putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject Here")
            .putExtra(android.content.Intent.EXTRA_TEXT, url)
            .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(Intent.createChooser(sharingIntent, "Share with").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
于 2020-02-14T01:19:02.793 回答