我使用Realm从Fragment 1中的EditText保存用户输入,并在Fragment 2的TextView中显示输入。当用户单击第一个Fragment中的按钮时,我需要在第二个Fragment中显示该文本。
一切似乎都很好,但每次我在我的应用程序中午餐时,在保存对象之前查询都会超出范围,旧的输入会在TextView中显示。
以下是保存输入的方法,以及片段1中的OnClick方法:
public void setEmail() {
Realm realm = getRealm();
realm.beginTransaction();
final Email emailInput = new Email();
emailInput.setUsername(editEmail.getText().toString());
realm.copyToRealmOrUpdate(emailInput);
realm.commitTransaction();
}
@OnClick(R.id.btn_forgot)
public void onButtonClick() {
setEmail();
}
。 这是在Fragment 2中查询和设置文本的方法:
public void getEmail() {
Realm realm = getRealm();
RealmQuery<Email> queryUser = realm.where(Email.class);
Email resultEmail = queryUser.findFirst();
resendEmailTxt = (AutoResizeTextView) getView().findViewById(R.id.resend_user_email);
if (resendEmailTxt != null) {
this.resendEmailTxt.setText(resultEmail.getUsername());
}
}
@Override
public void onStart() {
super.onStart();
getEmail();
}
模特课:
public class Email extends RealmObject {
@PrimaryKey
public int id = 0;
private String username;
//Getters and setters here
}
答案 0 :(得分:0)
Second Fragment在数据启动时查询数据,也就是在第一个Fragment发生的onClick事件发生之前(因为两个片段大致同时创建)。
您需要通知第二个片段数据已在第一个片段中更改。有很多方法可以实现这一点,例如:
可能还有很多,但其中一个就够了;)