Адаптер повторного просмотра не обновляет значение, получаемое Sqlite

#android #database #android-recyclerview #android-sqlite

#Android #База данных #android-recyclerview #android-sqlite

Вопрос:

У меня есть одно приложение, в котором изначально я вставляю параметр для цвета шрифта и размера шрифта вручную, и, получая эти данные в adpater путем чтения базы данных, я смог внести изменения в размер шрифта и цвет шрифта элементов списка.

Важный код:

метод вставки помощника:

  public boolean insertData(ContactModel contactModel) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
//        contentValues.put(col_0,contactModel.getId());
        contentValues.put(col_1,contactModel.getName());
        contentValues.put(col_2,contactModel.getNumber());
        contentValues.put(col_3,contactModel.getColor());
        contentValues.put(col_4,contactModel.getFSize());
        contentValues.put(col_5,contactModel.getDataIndex());
//        long result =db.insert(Table_name,null,contentValues);

        long result = db.insertWithOnConflict(Table_name, null, contentValues,SQLiteDatabase.CONFLICT_REPLACE);

        if(result == -1){
            return false;
        }else{
            return true;
        }
    }
  

метод для вставки данных :

  public void tempinsert(String name,String num,String color,int size,int index){
        boolean inSamedata=tempSqliteDatabaseHelper.IsItemExist(name,num);
        if(inSamedata==false){
            boolean indata = tempSqliteDatabaseHelper.insertData(new ContactModel(name,num,color,size,index));
            if (indata == true) {
                Log.e("DataSave","DataSave");
            }
            else{
                Log.e("In_Data_not_True","In Data not True");
            }
        }else if(inSamedata==true){
            Log.e("Record_Exist","Record Exist");
        }
    }
  

Вызов вышеуказанного метода:

 tempinsert(getDisplayName(),getPhNumber(),"#2d2d2d",35,1);
  

Как вы можете видеть, я вставляю цвет и размер шрифта статически.

Код внутри адаптера метода onBind для внесения изменений в элемент списка:

    @Override
    public void onBindViewHolder(@NonNull MyContactHolder myContactHolder, int i) {

        myContactHolder.Name.setText(customDataListModels.get(i).getName());
        myContactHolder.Number.setText(customDataListModels.get(i).getNumber());
        Log.e("poistionAdapter:", String.valueOf(myContactHolder.getPosition()));

        Cursor cursor = tempSqliteDatabaseHelper.getAllData();
        if (cursor.getCount() == 0) {
            Toast.makeText(mcontext.getApplicationContext(), "No Contact Selected", Toast.LENGTH_SHORT).show();

            return;
        }
        while (cursor.moveToNext()) {
           Integer SFontsize=cursor.getInt(4);
            String SColor=cursor.getString(3);
        myContactHolder.Name.setTextColor(Color.parseColor(cursor.getString(3)));
            myContactHolder.Name.setTextSize(SFontsize);

            Log.d("Font_Size", String.valueOf(SFontsize));
            Log.d("Font_color", String.valueOf(SColor));
        }
    }
  

Здесь внутри журнала я получаю то же значение, что и вставлено, все в порядке до этого момента, проблема возникает после того, как я обновляю fontsize и fontcolor в базе данных.После обновления я могу получить обновленный размер шрифта / цвет в журнале, но всякий раз, когда я даю это значение

 myContactHolder.Name.setTextColor(Color.parseColor(cursor.getString(3)));
                myContactHolder.Name.setTextSize(SFontsize);
  

Textview не обновляет размер шрифта и цвет в соответствии с обновлением, забавно, что для cursor.getString(3) и SFontsize ,, я получаю значение обновления.Если вы запросили какой-либо другой код для понимания моей проблемы, напишите в комментарии.

Комментарии:

1. Вызываете ли вы adapter.notifyDataSetChanged(); после обновления массива?

2. да, это так, чтобы убедиться, что я также проверяю после перезапуска приложения