Sak*_*o73 339 android android-context android-activity
我ListView在我的Android应用程序中实现了一个.我ListView使用类的自定义子类绑定到此ArrayAdapter.在重写ArrayAdapter.getView(...)方法中,我指定了一个OnClickListener.在onClick方法中OnClickListener,我想发布一个新活动.我得到了例外:
Calling startActivity() from outside of an Activity context requires the
FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得Context的ListView(当前Activity)下工作?
Ale*_*voy 544
或
或作为最后的手段,
_
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Run Code Online (Sandbox Code Playgroud)
编辑 - 我会避免设置标志,因为它会干扰正常的事件流和历史堆栈.
Bru*_*eri 93
您可以使用addFlags代替它来实现它setFlags
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Run Code Online (Sandbox Code Playgroud)
根据文件,它做:
向intent添加其他标志(或使用现有标志值).
编辑
请注意,如果你使用的是改变历史堆栈的标志,Alex Volovoy的回答是:
...避免设置标志,因为它会干扰事件和历史堆栈的正常流动.
san*_*h_p 32
如果由于使用如下创建选择器而出现错误:
Intent sharingIntent = new Intent(Intent.ACTION_VIEW);
sharingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sharingIntent.setData(Uri.parse("http://google.com"));
startActivity(Intent.createChooser(sharingIntent, "Open With"));
Run Code Online (Sandbox Code Playgroud)
设置标志以创建选择器,如下所示:
Intent sharingIntent = new Intent(Intent.ACTION_VIEW);
sharingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sharingIntent.setData(Uri.parse("http://google.com"));
Intent chooserIntent = Intent.createChooser(sharingIntent, "Open With");
chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(chooserIntent);
Run Code Online (Sandbox Code Playgroud)
mre*_*elt 14
我想也许你正在错误的地方实现OnClickListener - 通常你应该在你的Activity中实现一个OnItemClickListener并将其设置在ListView上,否则你的事件就会出现问题......
djd*_*nce 12
另外:如果您在片段视图中显示链接,请不要像这样创建它
adapter = new ListAdapter(getActivity().getApplicationContext(),mStrings);
Run Code Online (Sandbox Code Playgroud)
而是打电话
adapter = new ListAdapter(getActivity(),mStrings);
Run Code Online (Sandbox Code Playgroud)
适配器在两种情况下都能正常工作,但链接仅适用于最后一个.
在Android 28(Android P)startActivity
if ((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) == 0
&& (targetSdkVersion < Build.VERSION_CODES.N
|| targetSdkVersion >= Build.VERSION_CODES.P)
&& (options == null
|| ActivityOptions.fromBundle(options).getLaunchTaskId() == -1)) {
throw new AndroidRuntimeException(
"Calling startActivity() from outside of an Activity "
+ " context requires the FLAG_ACTIVITY_NEW_TASK flag."
+ " Is this really what you want?");
}
Run Code Online (Sandbox Code Playgroud)
所以最好的方法是添加 FLAG_ACTIVITY_NEW_TASK
Intent intent = new Intent(context, XXXActivity.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
小智 8
CustomAdapter mAdapter = new CustomAdapter( getApplicationContext(), yourlist);
Run Code Online (Sandbox Code Playgroud)
要么
Context mContext = getAppliactionContext();
CustomAdapter mAdapter = new CustomAdapter( mContext, yourlist);
Run Code Online (Sandbox Code Playgroud)
改为以下
CustomAdapter mAdapter = new CustomAdapter( this, yourlist);
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您在某个方法中在列表器中创建意图,请参阅
override onClick (View v).
Run Code Online (Sandbox Code Playgroud)
然后通过这个视图调用上下文:
v.getContext ()
Run Code Online (Sandbox Code Playgroud)
甚至不需要SetFlags ......
| 归档时间: |
|
| 查看次数: |
221920 次 |
| 最近记录: |