gpt4 book ai didi

java - 回收器 View 未使用 notificationDataSetChanged() 进行更新;

转载 作者:行者123 更新时间:2023-12-02 01:11:03 27 4
gpt4 key购买 nike

当我关闭该对话框时,它不会使用新数据刷新其下方的 Activity 。我需要手动刷新 Activity 或启动一个新 Activity (看起来很奇怪)才能显示它,我不确定为什么我的 recyclerViewAdapter.notifyDataSetChanged();在 saveItem 方法中不起作用。

package com.bawp.babyneeds;

import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.bawp.babyneeds.data.DatabaseHandlerDiary;
import com.bawp.babyneeds.model.Diary;
import com.bawp.babyneeds.ui.RecyclerViewAdapter;

import java.util.ArrayList;
import java.util.List;

public class ListActivity extends AppCompatActivity {
private static final String TAG = "ListActivity";
private RecyclerView recyclerView;
private RecyclerViewAdapter recyclerViewAdapter;
private List<Diary> diaryList;
private DatabaseHandlerDiary databaseHandlerDiary;
private FloatingActionButton fab;
private AlertDialog.Builder builder;
private AlertDialog alertDialog;
private Button saveButton;
private EditText diaryName;
private EditText diaryDesc;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);

recyclerView = findViewById(R.id.recyclerview);
fab = findViewById(R.id.fab);


databaseHandlerDiary = new DatabaseHandlerDiary(this);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

diaryList = new ArrayList<>();

//Get items from db
diaryList = databaseHandlerDiary.getAllDiaries();

for (Diary diary : diaryList) {

Log.d(TAG, "onCreate: " + diary.getDiaryDesc());

}

recyclerViewAdapter = new RecyclerViewAdapter(this, diaryList);
recyclerView.setAdapter(recyclerViewAdapter);
recyclerViewAdapter.notifyDataSetChanged();

fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createPopDialog();
}
});
}


private void createPopDialog() {
builder = new AlertDialog.Builder(this);
View view = getLayoutInflater().inflate(R.layout.popup, null);
diaryName = view.findViewById(R.id.edit_text_name_diary);
diaryDesc = view.findViewById(R.id.edit_text_desc_diary);
saveButton = view.findViewById(R.id.saveButton);

builder.setView(view);
alertDialog = builder.create();
alertDialog.show();

saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!diaryName.getText().toString().isEmpty()
&& !diaryDesc.getText().toString().isEmpty()) {
saveItem(v);
//recyclerViewAdapter.notifyDataSetChanged();
}else {
Snackbar.make(v, "Empty Fields not Allowed", Snackbar.LENGTH_SHORT)
.show();
}
}
});
}


private void saveItem(View view) {
//Todo: save each baby diary to db
final Diary diary = new Diary();

String newDiary = diaryName.getText().toString().trim();
String newDesc = diaryDesc.getText().toString().trim();

diary.setDiaryName(newDiary);
diary.setDiaryDesc(newDesc);

databaseHandlerDiary.addDiary(diary);
recyclerViewAdapter.notifyDataSetChanged(); // <-------------------------this is not working

Snackbar.make(view, "Diary Saved",Snackbar.LENGTH_SHORT)
.show();


new Handler().postDelayed(new Runnable() {
@Override
public void run() {
alertDialog.dismiss();

//Todo: move to next screen - details screen
//startActivity(new Intent(ListActivity.this, ListActivity.class));
//finish();

}
}, 1000);
}
}

谢谢...

添加了DatabaseHandlerDiary类

package com.bawp.babyneeds.data;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.bawp.babyneeds.model.Diary;
import com.bawp.babyneeds.R;
import com.bawp.babyneeds.util.Util;

import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class DatabaseHandlerDiary extends SQLiteOpenHelper {

public DatabaseHandlerDiary(Context context) {
super(context, Util.DATABASE_NAME_DIARY, null, Util.DATA_BASE_VERSION_DIARY);
}

@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_DIARY_TABLE = "CREATE TABLE " + Util.TABLE_NAME_DIARY + " ("
+ Util.KEY_ID_DIARY + " INTEGER PRIMARY KEY," + Util.KEY_NAME_DIARY + " TEXT,"
+ Util.KEY_DESC_DIARY + " TEXT," + Util.KEY_DATE_ADDED_DIARY + ")";
db.execSQL(CREATE_DIARY_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String DROP_TABLE = String.valueOf(R.string.db_drop);
db.execSQL(DROP_TABLE, new String[]{Util.DATABASE_NAME_DIARY});

//create new table
onCreate(db);
}

//CRUD: create read update delete

//add diary
public void addDiary(Diary diary) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(Util.KEY_NAME_DIARY, diary.getDiaryName());
values.put(Util.KEY_DESC_DIARY, diary.getDiaryDesc());
values.put(Util.KEY_DATE_ADDED_DIARY, diary.getDateDiaryAdded());

//^ insert to row
db.insert(Util.TABLE_NAME_DIARY, null, values);
db.close();
}

//get diary
public Diary getDiary(int id) {
SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.query(Util.TABLE_NAME_DIARY, new String[]{
Util.KEY_NAME_DIARY, Util.KEY_DESC_DIARY, Util.KEY_DATE_ADDED_DIARY},
Util.KEY_ID_DIARY +"=?", new String[]{String.valueOf(id)},
null, null, null);

if (cursor != null) {
cursor.moveToFirst();
}

Diary diary = new Diary();
diary.setDiaryId(Integer.parseInt(cursor.getString(0)));
diary.setDiaryName(cursor.getString(1));
diary.setDiaryDesc(cursor.getString(2));

return diary;
}

//get all diaries
public List<Diary> getAllDiaries() {
SQLiteDatabase db = this.getReadableDatabase();

List<Diary> diaryList = new ArrayList<>();

Cursor cursor = db.query(Util.TABLE_NAME_DIARY,
new String[]{Util.KEY_ID_DIARY,
Util.KEY_NAME_DIARY,
Util.KEY_DESC_DIARY,
Util.KEY_DATE_ADDED_DIARY},
null, null, null, null,
Util.KEY_DATE_ADDED_DIARY + " DESC");

if (cursor.moveToFirst()) {
do {
Diary diary = new Diary();
diary.setDiaryId(Integer.parseInt(cursor.getString(cursor.getColumnIndex(Util.KEY_ID_DIARY))));
diary.setDiaryName(cursor.getString(cursor.getColumnIndex(Util.KEY_NAME_DIARY)));
diary.setDiaryDesc(cursor.getString(cursor.getColumnIndex(Util.KEY_DESC_DIARY)));

//convert Timestamp to something readable
DateFormat dateFormat = DateFormat.getDateInstance();
String formattedDate = dateFormat.format(new Date(cursor.getLong(cursor.getColumnIndex(Util.KEY_DATE_ADDED_DIARY)))
.getTime()); // Feb 23, 2020
diary.setDateDiaryAdded(formattedDate);

//Add to arraylist
diaryList.add(diary);
} while (cursor.moveToNext());
}
return diaryList;
}

public int updateItem(Diary diary) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(Util.KEY_NAME_DIARY, diary.getDiaryName());
values.put(Util.KEY_DESC_DIARY, diary.getDiaryDesc());
values.put(Util.KEY_DATE_ADDED_DIARY, java.lang.System.currentTimeMillis());//timestamp of the system

//update row
return db.update(Util.TABLE_NAME_DIARY, values,
Util.KEY_ID_DIARY + "=?",
new String[]{String.valueOf(diary.getDiaryId())});

}

//Todo: Add Delete Item
public void deleteItem(int id) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(Util.TABLE_NAME_DIARY,
Util.KEY_ID_DIARY + "=?",
new String[]{String.valueOf(id)});

//close
db.close();

}

//Todo: getItemCount
public int getItemsCount() {
String countQuery = "SELECT * FROM " + Util.TABLE_NAME_DIARY;
SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.rawQuery(countQuery, null);

return cursor.getCount();

}

}

最佳答案

diary添加到diaryList,然后通知您的适配器

diaryList.add(diary);

recyclerViewAdapter.notifyDataSetChanged();

为了使其更加优化,请调用

recyclerViewAdapter.notifyItemInserted(diaryList.size() - 1)

您不需要更新所有数据集,您只需要通知添加的项目

关于java - 回收器 View 未使用 notificationDataSetChanged() 进行更新;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59401401/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com