【发布时间】:2020-06-22 10:58:21
【问题描述】:
我有一个项目,它是一个简单的备忘录应用程序。我在RecyclerView 中显示最新数据时遇到问题。每次用户添加新备忘录时,我都必须重新启动应用程序才能看到新的更改。我该如何解决?
MainActivity(RecyclerView 所在的位置)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRepository = new MemoRepository(this);
initRecyclerView();
insertDummyData();
}
private void initRecyclerView(){
mRecyclerView = findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mMemoAdapter = new MemoAdapter(mNotes, this);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mMemoAdapter);
}
private void insertDummyData(){
mRepository.getAllMemos().observe(this, new Observer<List<Note>>() {
@Override
public void onChanged(List<Note> notes) {
if (mNotes.size() > 0){
notes.clear();
}
if (notes != null){
mNotes.addAll(notes);
}
mMemoAdapter.notifyDataSetChanged();
}
});
}
存储库
public class MemoRepository {
private MemoDatabase mDatabase;
public MemoRepository (Context context){
this.mDatabase = MemoDatabase.getDatabase(context);
}
public void insertNewMemo(Note note){
new InsertMemoAsyncTask(mDatabase.memoInterface()).execute(note);
}
public LiveData<List<Note>> getAllMemos(){
return mDatabase.memoInterface().getAllMemos();
}
}
道接口
@Dao
public interface MemoInterface {
@Insert
void insertMemo(Note... note);
@Query("SELECT * FROM note")
LiveData<List<Note>> getAllMemos();
}
用户输入备忘录内容的活动
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.save_memo: {
//test
mNote.setTitle(editTitle.getText().toString());
mNote.setContent(content.getText().toString());
mNote.setTimestamp("00 0000");
mRepository.insertNewMemo(mNote);
finish();
break;
}
}
}
【问题讨论】: