解决在adapter中设置点击item时跳转activity时遇到的问题
报错信息: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
我的解决方法:
1. 在adapter中添加点击点击事件的接口
public interface OnItemClickListener {
void onClick(int pos);
void onLongClick(int pos);
}
2. 然后在构造器中添加监听
OnItemClickListener listener;
public MyLogAdapter(Context context, OnItemClickListener listener) {
this.context = context;
this.listener = listener;
}
3. 在onBindViewHolder中设置itemview点击事件
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.itemView.setOnClickListener(v -> {
listener.onClick(position);
});
holder.itemView.setOnLongClickListener(v -> {
listener.onLongClick(position);
return false;
});
}
4. 之后在activity中使用
MyLogAdapter myAdapter;
myAdapter = new MyLogAdapter(getActivity(), new MyLogAdapter.OnItemClickListener() {
@Override
public void onClick(int pos) {
Intent intent = new Intent(getActivity(), LogActivity.class);
startActivity(intent);
}
@Override
public void onLongClick(int pos) {
//你要做的事
}
});
adapter整体代码
public class MyLogAdapter extends RecyclerView.Adapter<MyLogAdapter.MyViewHolder> {
List<UserNote> allNotes = new ArrayList<>();
Context context;
OnItemClickListener listener;
public MyLogAdapter(Context context, OnItemClickListener listener) {
this.context = context;
this.listener = listener;
}
public void setAllNotes(List<UserNote> allNotes) {
this.allNotes = allNotes;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View itemView = layoutInflater.inflate(R.layout.item_log_recyclerview,parent,false);
return new MyViewHolder(itemView);
}
@SuppressLint({"UseCompatLoadingForDrawables", "SetTextI18n"})
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
UserNote userNote = allNotes.get(position);
holder.layout.setBackground(context.getResources().getDrawable(userNote.getImgItemId()));
holder.title.setText(userNote.getTitle());
holder.time.setText(userNote.getTime());
holder.itemView.setOnClickListener(v -> {
listener.onClick(position);
});
holder.itemView.setOnLongClickListener(v -> {
listener.onLongClick(position);
return false;
});
}
@Override
public int getItemCount() {
return allNotes.size();
}
static class MyViewHolder extends RecyclerView.ViewHolder{
ConstraintLayout layout;
TextView title;
TextView time;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
layout = itemView.findViewById(R.id.item_log_layout);
title = itemView.findViewById(R.id.item_log_title);
time = itemView.findViewById(R.id.item_log_time);
}
}
public interface OnItemClickListener {
void onClick(int pos);
void onLongClick(int pos);
}
}