Удалить одну строку из базы данных RecyclerView Room - PullRequest
0 голосов
/ 20 апреля 2020

Итак, у меня есть recyclerView, и когда пользователь нажимает на LikeButton, элемент / строка сохраняется в БД комнаты "favour_table" и в пользовательском действии "Избранное".

enter image description here

Избранные действия пользователя:

enter image description here

Когда пользователь нажимает на снова выбрал LikeButton, я хочу удалить строку из «Favorites_table» в моей БД и любимое занятие. Использование mAppRepository.deleteRow (favouriteModel); не удаляет строку / элемент, по которым щелкнули. Как удалить строку / элемент при нажатии кнопки LikedButton? Адаптер для recyclerView:

@Override
    public void onBindViewHolder(@NonNull LessonsViewHolder holder, int position) {
        Log.i(TAG, "onBindViewHolder: Bind RecyclerView");

        final LessonsModel lessonsModel = mLessonsModelList.get(position);
        holder.BindLessonsModel(lessonsModel);

        holder.fav_status.setLiked(mLocalStorage.isLessonFavorited(lessonsModel.getKey_id()));
        holder.fav_status.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                FavoriteModel favoriteModel = new FavoriteModel();

                int fav_stat = lessonsModel.getFav_status();
                String title_norsk = lessonsModel.getTitle_Norsk();
                String title_pornun = lessonsModel.getTitle_Pronun();
                String title_tigrinya = lessonsModel.getTitle_Tigrinya();
                int audio = lessonsModel.getAudioRecource();
                String lesson_name = lessonsModel.getLesson_name();

                favoriteModel.setFav_status(fav_stat);
                favoriteModel.setTitle_Norsk(title_norsk);
                favoriteModel.setTitle_Tigrinya(title_tigrinya);
                favoriteModel.setTitle_Pronun(title_pornun);
                favoriteModel.setAudioRecource(audio);
                favoriteModel.setLesson_name(lesson_name);

                if (mLocalStorage.isLessonFavorited(lessonsModel.getKey_id())) {
                    mLocalStorage.unFavoriteLesson(lessonsModel.getKey_id());
                    mAppRepository.deleteRow(favoriteModel);
                    //mAppRepository.deleteAllFav();
                    //favoriteModelList.remove(position);
                    holder.fav_status.setLiked(false);
                    StyleableToast.makeText(v.getContext(), removeFromText, Toast.LENGTH_SHORT,
                            R.style.toastStyles).show();

                } else {
                    mLocalStorage.favoriteLesson(lessonsModel.getKey_id());
                    mAppRepository.insertToFV(favoriteModel);
                    holder.fav_status.setLiked(true);
                    StyleableToast.makeText(v.getContext(), addToFavText, Toast.LENGTH_SHORT,
                            R.style.toastStyles).show();
                }


            }
        });
    }

    @Override
    public int getItemCount() {
        if (mLessonsModelList != null) {
            return mLessonsModelList.size();
        } else {
            return 0;
        }
    }

FavoriteDAO для "favour_table"

@Dao
public interface FavoriteDAO {

    // Inserting favorite lessons into Favorite table
    @Insert 
    void insertIntoFavTable(FavoriteModel favoriteModel);


    @Query("SELECT * FROM favorite_table")
    LiveData<List<FavoriteModel>> getFavoriteModel();

    // Remove All favorites from favorite table
    @Query("DELETE FROM favorite_table")
    void deleteAllFav();

    @Delete
    void deleteRow(FavoriteModel favoriteModel);
}

FavoriteModel / Entity:

package com.asenay.norsk_tigrinya.UserFavorite;

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.PrimaryKey;


@Entity(tableName = "favorite_table")
public class FavoriteModel {

    @PrimaryKey(autoGenerate = true)
    private Integer key_id;
    private String title_Norsk;
    private String title_Pronun;
    private String title_Tigrinya;
    private int mAudioRecource;

    @ColumnInfo(name = "fav_status")
    private int fav_status;
    private String lesson_name;

    public FavoriteModel() {
    }

/*  public FavoriteModel(String title_Norsk,
                         String title_Pronun,
                         String title_Tigrinya,
                         int audioRecource,
                         int fav_status,
                         String lesson_name) {
        this.title_Norsk = title_Norsk;
        this.title_Pronun = title_Pronun;
        this.title_Tigrinya = title_Tigrinya;
        this.mAudioRecource = audioRecource;
        this.fav_status = fav_status;
        this.lesson_name = lesson_name;
    }*/

    public Integer getKey_id() {return key_id;}

    public void setKey_id(Integer key_id) {this.key_id = key_id;}

    public String getTitle_Norsk() { return title_Norsk; }

    public void setTitle_Norsk(String title_Norsk) {this.title_Norsk = title_Norsk;}

    public String getTitle_Pronun() {return title_Pronun;}

    public void setTitle_Pronun(String title_Pronun) {this.title_Pronun = title_Pronun;}

    public String getTitle_Tigrinya() {return title_Tigrinya;}

    public void setTitle_Tigrinya(String title_Tigrinya) {this.title_Tigrinya = title_Tigrinya; }

    public int getAudioRecource() {return mAudioRecource;}

    public void setAudioRecource(int audioRecource) {mAudioRecource = audioRecource;}

    public int getFav_status() {return fav_status;}

    public void setFav_status(int fav_status) {this.fav_status = fav_status;}

    public String getLesson_name() {return lesson_name;}

    public void setLesson_name(String lesson_name) {this.lesson_name = lesson_name;}

}

1 Ответ

1 голос
/ 20 апреля 2020

Вы должны удалить из своей базы данных и из адаптера одновременно, чтобы увидеть результат в реальном времени, при условии, что база данных комнаты настроена правильно. Сделайте это в этой части вашего onBindViewHolder:

            if (mLocalStorage.isLessonFavorited(lessonsModel.getKey_id())) {
                mLocalStorage.unFavoriteLesson(lessonsModel.getKey_id());
                mAppRepository.deleteRow(favoriteModel);
                //remove from database
                mAppRepository.deleteRow(favoriteModelList.get(positon));
                //remove from adapter
                favoriteModelList.remove(position);
                notifyDataSetChanged();


                holder.fav_status.setLiked(false);
                StyleableToast.makeText(v.getContext(), removeFromText, Toast.LENGTH_SHORT,
                        R.style.toastStyles).show();

            }
...