как удалить строку SQlite комнаты нажатием кнопки

В моем адаптере базы данных 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);
        }
    }
}

с delicon определено в places_list_item.xml

  <TextView
     android:id="@+id/secondLine"/>
   <TextView
    android:id="@+id/firstLine"/>
 <ImageButton
    android:id="@+id/delicon"/>

Теперь я пытаюсь удалить каждую соответствующую строку, нажимая кнопку изображения. Я определил интерфейс DB как:

@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;
  }
}

person BaRud    schedule 07.03.2018    source источник


Ответы (1)


Создайте функции 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();
    }
person Himanshu Bhatnagar    schedule 07.03.2018
comment
это не работает. Следует ли мне снова определить мою базу данных здесь? - person BaRud; 07.03.2018
comment
Да, вы можете попробовать, иначе вы также можете создать отдельный класс для доступа к базе данных. - person Himanshu Bhatnagar; 07.03.2018
comment
Привет, вы имеете в виду, что DBInterface недостаточно? что мне делать, чтобы получить доступ к БД? - person BaRud; 07.03.2018
comment
Вы можете использовать SQLiteOpenHelper. Это может помочь: stackoverflow.com/questions/12015731/android-sqlite-example - person Himanshu Bhatnagar; 07.03.2018
comment
Я не думаю, что нам нужен SQLiteOpenHelper с местом, не так ли? - person BaRud; 07.03.2018