我已经在我的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(当前活动)正在工作的上下文?


当前回答

从视图的Activity上下文外部调用startActivity()

val context = activity.applicationContext
openBrowser(context, MenuUrl.TERM_CONDITION)

Do

   1. val context = binding.root.context // If you are using view binding
   2. val context = yourView.context // If you are not use view binding
    openBrowser(context, MenuUrl.TERM_CONDITION)

谢谢你!

其他回答

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

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

解决了这个问题。

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

Intent viewIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);    
viewIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);    
startActivity(viewIntent);   

我希望这能奏效。

给所有服用沙玛林的人。Android (MonoDroid)甚至当StartActivity从activity被调用时-这实际上是Xamarin bug与新的ART运行时,请参阅https://bugzilla.xamarin.com/show_bug.cgi?id=17630

我认为也许你在错误的地方实现OnClickListener -通常你应该在你的活动中实现OnItemClickListener,并将其设置在ListView上,否则你会遇到事件问题…

在你的Activity中(你调用适配器的地方),只需用YourActivity.this改变getActivityContext()。 这里有一个例子:

yourAdapter = new YourAdapter(yourList, YourActivity.this); // Here YourActivity.this is the Context instead of getActivityContext()
recyclerView.setAdapter(yourAdapter);