gpt4 book ai didi

java - 获取选定的recyclerView项目的id android

转载 作者:行者123 更新时间:2023-12-02 08:55:12 25 4
gpt4 key购买 nike

我制作了一个笔记应用程序,一切正常。就在 RecyclerView 列表中,当我选择一个或多个项目并在菜单中单击删除按钮时,注释不会被删除。尽管删除方法在另一个地方有效。菜单中删除按钮的方法如下:

@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
if (item.getItemId() == R.id.delete_selected) {
for (NotePad notePad : notes) {
if (selectedIds.contains(notePad.getId())) {
database = new Database(this);
database.deleteNote(notePad.getId());
}
}
adapter.notifyDataSetChanged();
return true;
}
return false;
}

以及在我的数据库类中删除注释的方法:

   void deleteNote(long id) {
SQLiteDatabase database = this.getWritableDatabase();
database.delete(DATABASE_TABLE, ID + "=?", new String[] {String.valueOf(id)});
database.close();
}

我不知道如何将所选注释的 id 与我的方法相关联,因为 deletNote 方法接收长值,但我的 selectedId 是列表。提前致谢。

已更新

我意识到我的代码可以找到,但它不会刷新列表,并且还会从操作模式返回到工具栏。我尝试了adapter.notifyDataSetChanged();

最佳答案

使用此适配器。我用过接口(interface)。

public class NotePadAdapter extends RecyclerView.Adapter < NotePadAdapter.ViewHolder > {

private Context context;
private LayoutInflater inflater;
private List < NotePad > notes;
private List < Long > selectedIds = new ArrayList < > ();
private NoteClickListener listener;

NotePadAdapter(Context context, NoteClickListener listener, List < NotePad > notes) {
this.context = context;
this.inflater = LayoutInflater.from(context);
this.notes = notes;
this.listener = listener;
}

public interface NoteClickListener {
public void onNoteClick(NotePad notePad);
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.notes_list, parent, false);
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String title = notes.get(position).getTitle();
String date = notes.get(position).getDate();
String time = notes.get(position).getTime();

holder.setOnClickListener() {
listener.onNoteClick(notes.get(position))
}

holder.noteTitle.setText(title);
holder.noteTitle.setText(title);
holder.noteDate.setText(date);
holder.noteTime.setText(time);

long id = notes.get(position).getId();
if (selectedIds.contains(id)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
holder.rooView.setForeground(new ColorDrawable(ContextCompat.getColor(context, R.color.colorControlActivated)));
}
} else {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
holder.rooView.setForeground(new ColorDrawable(ContextCompat.getColor(context, android.R.color.transparent)));
}
}

}

@Override
public int getItemCount() {
return notes.size();
}

public NotePad getItem(int position) {
return notes.get(position);
}

public void setSelectedIds(List < Long > selectedIds) {
this.selectedIds = selectedIds;
notifyDataSetChanged();
}

class ViewHolder extends RecyclerView.ViewHolder {
TextView noteTitle, noteDate, noteTime;
ConstraintLayout rooView;

ViewHolder(@NonNull View itemView) {
super(itemView);

noteTitle = itemView.findViewById(R.id.note_title);
noteDate = itemView.findViewById(R.id.note_date);
noteTime = itemView.findViewById(R.id.note_time);
rooView = itemView.findViewById(R.id.root_view);

itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(), ContentActivity.class);
i.putExtra("ID", notes.get(getAdapterPosition()).getId());
v.getContext().startActivity(i);
}
});
}
}
}

在您启动此适配器的 Activity/fragment 中,为监听器传递this并实现接口(interface),每当您单击回收器 View 上的任何项目时,您都会此函数内的整个 NotePad 对象。

关于java - 获取选定的recyclerView项目的id android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60531509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com