在我的 Room Sqlite 数据库适配器中,我有一个图像按钮定义为:
public class PlacesAdapter extends RecyclerView.Adapter<PlacesAdapter.ViewHolder> {
List<PlaceSaved> items;
public PlacesAdapter(List<PlaceSaved> items) {
this.items = items;
}
@Override
public PlacesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.places_list_item,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(PlacesAdapter.ViewHolder holder, int position) {
holder.name.setText(items.get(position).getTitle());
holder.time.setText(items.get(position).getTime());
holder.delbutton.setClickable(true);
}
@Override
public int getItemCount() {
return items.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView name;
public TextView time;
public ImageButton delbutton;
public ViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.secondLine);
time= itemView.findViewById(R.id.firstLine);
delbutton = itemView.findViewById(R.id.delicon);
}
}
}
with delicon
定义在places_list_item.xml
<TextView
android:id="@+id/secondLine"/>
<TextView
android:id="@+id/firstLine"/>
<ImageButton
android:id="@+id/delicon"/>
现在,我试图通过单击图像按钮来删除每个相应的行。 我将 DBinterface 定义为:
@Dao
public interface DatabaseInterface {
@Query("SELECT * FROM placesaved")
List<PlaceSaved> getAllItems();
@Insert
void insertAll(PlaceSaved... todoListItems);
@Delete
void delete(PlaceSaved todeListItems);
}
现在我卡住了。 我应该如何以及在何处调用删除函数来删除行? 请帮忙。
此外,不知道是否需要,列表定义为:
@Entity
public class PlaceSaved {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "time")
private String time;
@ColumnInfo(name="title")
private String title;
public PlaceSaved(){
}
public PlaceSaved(String time, String title) {
this.time = time;
this.title = title;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
最佳答案
创建一个 onClickListner() 和一个 removeItem() 函数并在监听器中调用它。
@Override
public void onBindViewHolder(PlacesAdapter.ViewHolder holder, int position) {
final PlaceSaved item=items.get(position);
holder.name.setText(item.getTitle());
holder.time.setText(item.getTime());
holder.delbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
removeItem(item);
}
});
}
private void removeItem(PlaceSaved infoItem){
myDatabase=new MyDatabase();
myDatabase.delete(infoItem);
int pos=items.indexOf(infoItem);
items.remove(pos);
notifyItemRemoved(pos);
myDatabase.close();
}
关于android - 如何通过单击按钮删除房间的 SQlite 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49148789/