android - 回收视图适配器未更新值通过 Sqlite 获取
问题描述
我有一个应用程序,最初我手动插入字体颜色和字体大小的参数,并通过读取数据库将这些数据输入到适配器中,我能够更改列表项的字体大小和字体颜色。
重要代码:
助手的插入方法:
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));
}
}
在日志里面我得到与插入相同的值,到目前为止一切都很好,问题发生在我更新数据库中的字体大小和字体颜色之后。更新后我可以在日志中获得更新的字体大小/颜色,但每当我给这些价值
myContactHolder.Name.setTextColor(Color.parseColor(cursor.getString(3)));
myContactHolder.Name.setTextSize(SFontsize);
Textview 没有根据更新更新它的字体大小和颜色,有趣的是 cursor.getString(3) 和 SFontsize,我正在更新值。如果你需要任何其他代码来理解我在评论中发布的问题。
解决方案
推荐阅读
- flutter - 有没有办法从一个屏幕过渡到另一个屏幕,而不使用任何事件,只使用时间?
- mysql - 在一天中的任何时间获得价值
- eclipse - Eclipse VIews 在特定类上冻结
- java - 为什么我不能在 AppCompatActivity 中的函数之外使用 create 方法
- java - Android Java 添加了一个 ArrayList 现在程序运行很慢
- c# - Blazor / Entity Framework - 将子集合添加到时更新父级
- asp.net-mvc - ASP.NET Core 使用 HTTPClient 使用 ViewModel 发布表单数据 IFormFile
- php - 如何从mysql中选择字符串的几个字符
- angular - 使用函数更新值更改视图时出错
- python - t 测试为两者获取 nan 输出