领域是否有类似侦听器的提交数据? 我的代码是
...
RealmDatabase.submitNewUser(mainActivity.getMyRealm(), userModel);
mainActivity.closeKeyboard();
mainActivity.onBackPressed();
...
public static void submitNewUser(Realm myRealm, UserModel user) {
myRealm.beginTransaction();
UserDb userDb = myRealm.createObject(UserDb.class);
userDb.setUserid(getNextUserId(myRealm));
userDb.setName(user.name);
....
myRealm.commitTransaction();
}
private static int getNextUserId(Realm myRealm) {
try {
return myRealm.where(UserDb.class).max("userid").intValue() + 1;
} catch (ArrayIndexOutOfBoundsException e) {
return 1;
}
}
保存数据后,我关闭片段并返回上一个片段。 在启动功能上,检查是否有数据
@Override
public void onStart() {
super.onStart();
if (loading.isShowing()) loading.dismiss();
if (reloadList && checkContent()) {
....
}
reloadList = true;
}
private boolean checkContent() {
users = RealmDatabase.loadUserList(mainActivity.getMyRealm());
if (users.size() > 0 && users.get(0).userid > 0) {
// note:
// user id is auto increament while saved
// if no data, return dataset with userid = 0 for other purpose
return true;
} else {
....
return false;
}
}
public static List<UserModel> loadUserList(Realm myRealm) {
List<UserModel> list = new ArrayList<>();
RealmResults<UserDb> results = myRealm.where(UserDb.class).findAll();
results = results.sort("userid", Sort.DESCENDING);
for (UserDb result : results) {
UserModel userModel = new UserModel();
userModel.userid = result.getUserid();
....
userModel.note = result.getNote();
list.add(userModel);
}
if (list.size() == 0) {
UserModel userModel = new UserModel();
userModel.userid = 0;
userModel.note = "You still have no user at this time";
list.add(userModel);
}
return list;
}
checkContent(),user.size检测为1(添加了新数据)但userid仍为0。 我错过了这个逻辑吗?因为如果我在添加新用户后重新打开应用程序,一切运行良好。
更新
在使用监听器后,我得到了我的数据集,但仍未显示我的内容。经过一些试验后,我发现我的列表视图即使在我重新输入数据后也没有显示数据,并且在适配器上进行了notifydataset。
users = RealmDatabase.loadUserList(mainActivity.getMyRealm());
homeAdapter.reloadList(users);
....
public void reloadList(List<UserModel> users) {
this.users = users;
notifyDataSetChanged();
}
更新2
除了第一个项目之外,第二个,第三个和第二个项目的一切进展顺利
答案 0 :(得分:0)
领域是否有像提交数据的监听器一样?
是
realmResults.addChangeListener(realmChangeListener);
必须保持对RealmResults的字段引用。
如果我在添加新用户后重新打开应用程序,一切运行良好。
您可能不会更新从RealmResults构建的ArrayList。
答案 1 :(得分:0)
根据@epicPandaForce的回答,我使用了我的代码的监听器 并解决了我在@epicPandaForce答案中的最后一条评论中提到的问题,我改变了我的代码
getMyRealm().addChangeListener(new RealmChangeListener<Realm>() {
@Override
public void onChange(Realm element) {
// previous code in my activity
// getFragmentManager().popBackStackImmediate();
// new code in my activity
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, fragment);
}
});
这些代码实际上并不在侦听器中,而是在我的活动上调用函数。这些位置仅适用于其所称的位置。