我已经在我的Android应用程序中实现了一个ListView。我使用ArrayAdapter类的自定义子类绑定到这个ListView。在重写的ArrayAdapter.getView(…)方法中,我分配了一个OnClickListener。在OnClickListener的onClick方法中,我想启动一个新活动。我得到了一个异常:

Calling startActivity() from outside of an Activity  context requires the  
FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

我怎样才能得到ListView(当前活动)正在工作的上下文?


当前回答

我也有同样的问题。检查您传递的所有上下文。对于“链接”,它需要活动上下文而不是应用程序上下文。

以下是你应该检查的地方:

1)。如果你使用了LayoutInflater,那么检查你传递了什么上下文。

2)。如果您正在使用任何适配器,请检查您传递的上下文。

其他回答

芬兰湾的科特林版本

val intent = Intent(Intent.ACTION_EDIT, ContactsContract.Profile.CONTENT_URI)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
this.startActivity(intent)

在Adapter_Activity中使用此代码,并使用context.startActivity(intent_Object)和intent_Object. addflags (Intent.FLAG_ACTIVITY_NEW_TASK);

是这样的:

Intent n_act = new Intent(context, N_Activity.class);
n_act.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(n_act);

它的工作原理……

你可以用addFlags而不是setFlags来实现

myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

根据文档,它做到了:

添加额外的标志到意图(或与现有的标志值)。


EDIT

当你使用可能改变历史堆栈的标志时要小心,Alex Volovoy的回答说:

...避免设置标志,因为它会干扰正常的事件和历史堆栈流。

面对同样的问题,然后实施

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

解决了这个问题。

可能还有另一个原因与列表视图适配器有关。 你可以看到这个博客,描述得很好。

如果你在Cordova插件中调用共享意图,设置标志将不起作用。而是用这个——

cordova.getActivity().startActivity(Intent.createChooser(shareIntent, "title"));