android - 在 Activity 上下文之外调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK
问题描述
我收到错误消息AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag
。完整的堆栈跟踪:
main Process: com.kd.book, PID: 3487 android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? at android.app.ContextImpl.startActivity(ContextImpl.java:1238) at android.app.ContextImpl.startActivity(ContextImpl.java:1225) at com.kd.book.Adapter.MyComicAdapter$1.onClick(MyComicAdapter.java:63) at com.kd.book.Adapter.MyComicAdapter$MyViewHolder.onClick(MyComicAdapter.java:99)
我是 Android 开发新手,不知道如何解决。
我的代码:
public class MyComicAdapter extends RecyclerView.Adapter<MyComicAdapter.MyViewHolder> {
Context context;
List<Comic> comicList;
LayoutInflater inflater;
public MyComicAdapter(Context context, List<Comic> comicList) {
this.context = context;
this.comicList = comicList;
inflater=LayoutInflater.from(context);
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View itemView = inflater.inflate(R.layout.comic_item, viewGroup, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {
Picasso.get().load(comicList.get(i).Image).into(myViewHolder.comic_image);
myViewHolder.comic_name.setText(comicList.get(i).Name);
//Event
myViewHolder.setRecyclerItemClickListener(new IRecyclerItemClickListener(){
@Override
public void onClick(View view, int position) {
//save the comic selected
Common.comicSelected = comicList.get(position);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(new Intent(context,ChapterActivity.class));
}
});
}
@Override
public int getItemCount() {
return comicList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView comic_name;
ImageView comic_image;
IRecyclerItemClickListener recyclerItemClickListener;
public void setRecyclerItemClickListener(IRecyclerItemClickListener recyclerItemClickListener) {
this.recyclerItemClickListener = recyclerItemClickListener;
}
public MyViewHolder(@NonNull View itemView) {
super(itemView);
comic_image = itemView.findViewById(R.id.image_comic);
comic_name = itemView.findViewById(R.id.comic_name);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
recyclerItemClickListener.onClick(view, getAdapterPosition());
}
}
}
有任何想法吗?
解决方案
试试这个方法,
1. 在你的适配器中创建一个接口并将位置传递给它(希望你知道如何制作和使用接口)。
2. 为您的活动类实现该接口。
3. 在它的 override 方法中,你会得到一个列表的位置。
4. 通过使用该位置,获取所需的数据并在其中调用意图。
完毕。
推荐阅读
- python - Rest API 使用 Robotframework 实现自动化
- dart - setState 不会导致在颤动中重新渲染新屏幕
- doctrine - 具有自引用 ManyToMany 的继承实体:EXTRA_LAZY 获取模式不起作用
- javascript - 如何仅在一页上更改 Javascript 轮播 (slick.js) 设置?
- python - 如何根据多列共有的值对数据框进行分组?
- node.js - 节点 `smtp-server` 模块不适用于 TLS
- api - 如何使用suitetalk在netsuite中创建发票?
- php - 日期 from_date 和 to_date 之间的 laravel
- javascript - 用于在不使用 Web 服务器的情况下调试客户端 javascript 的 launch.json 配置
- javascript - Firebase javascript Admin SDK:加载数组的长度不正确