Метод в Recyclerview вызывается каждый раз, когда я прокручиваю - PullRequest
0 голосов
/ 23 февраля 2019

Я использую базу данных SQLite для хранения некоторых значений / элементов из переработчика, которые поступают из Firebase долгим нажатием.И в этом обзоре я изменяю фон значений / элементов, которые уже хранятся в базе данных SQLite.Но проблема в том, что когда я долго нажимаю на любой предмет, он также окрашивает каждый 21-й предмет в обзоре переработчика.а затем прокрашивает любой случайный элемент при прокрутке вверх.

OnBindView

holder.Card.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {

                    if (favDB.isFav(model.getUrl(), model.getName())) {
                        Toast.makeText(getContext(), "Already in Favorite", Toast.LENGTH_SHORT).show();
                    } else {
                        new FavDB(getContext()).addToFav(
                                model.getName(), model.getType(), model.getUrl(),
                                model.getBrowser(), model.getImage());
                        holder.Card.setCardBackgroundColor(R.color.Background);
                        Toast.makeText(getContext(), "Added to Favorite", Toast.LENGTH_SHORT).show();
                    }

                    return true;
                }
            });

            if (favDB.isFav(model.getUrl(), model.getName())) {

                try {
                    Toast.makeText(getContext(), "Coloring", Toast.LENGTH_SHORT).show();
                    holder.Card.setCardBackgroundColor(R.color.Background);
                    favDB.close();
                }catch (Exception e){
                    Toast.makeText(getContext(), "Error : " + e, Toast.LENGTH_SHORT).show();
                }
            }

SQLite Helper

public void addToFav(String name, String type, String url, String browser, String image) {
    SQLiteDatabase favDatabase = getReadableDatabase();
    String favAdd =
            String.format("INSERT INTO fav(name,url) VALUES('%s','%s');",
                    name, type, url, browser, image);
    favDatabase.execSQL(favAdd);
    favDatabase.close();

}

public boolean isFav(String url, String name) {
    SQLiteDatabase favDatabase = getReadableDatabase();
    String masterQuery = String.format("SELECT * FROM fav WHERE (url= '%s' AND name = '%s')",
            url, name);

    Cursor cursor = favDatabase.rawQuery(masterQuery, null);
    if (cursor.getCount() <= 0) {
        cursor.close();
        return false;
    }
    cursor.close();
    favDatabase.close();
    return true;
}
...