2016-11-16 69 views
0

我使用Realm在片段1中保存來自EditText的用戶輸入,並在片段2的TextView中顯示該輸入。當用戶單擊第一個片段內的按鈕時,我需要顯示文本里面第二個片段。領域使用的是舊對象,而不是更新

一切似乎都很好,但每次我午餐我的應用程序時,查詢都會在保存對象前被優先處理,舊的輸入顯示在TextView中。

  • 當我輸入一些,舊文本已經保存已經和內部的TextView顯示

這裏是節省投入,並OnClick方法裏面片段1方法:

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(); 

} 

。 這裏是內部片段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

如何設置片段?它們是否包含在ViewPager,Activity等中?他們是同時創建的嗎?在我看來他們是,並且在點擊Fragment1的按鈕之前執行Fragment2的'getEmail()'。 –

+0

@RafałZawadzki他們在ViewPager中,我將它們以編程方式添加到pagerAdapter內。我可以在getEmail()之前執行按鈕單擊操作嗎? –

+0

片段位於TabFragment(ViewPager)內部,並且它們是在同一時間創建的。 @RafałZawadzkithx幫助兄弟 –

回答

0

第二塊碎片查詢數據啓動時,也就是從第一片段發生onClick事件之前(因爲這兩個片段大致在同一時間創建)。

您需要通知第二個片段,數據在第一個片段中已被更改。有實現這個目的,如:很多方法

  • 接口
  • 事件總線(奧托,EventBus)
  • 反應式編程

有可能是多了很多,但其中之一將是足夠的;)

+0

Zawadzki感謝您的幫助。我有同樣的想法,但無法找到解決方案。我仍然是初級開發人員,所以真的不知道如何通知第二個片段數據已經改變。請給我一些關於Fragment2中的公共方法或其他解決方案的更多細節。 –

+0

這取決於你的情況,但我會建議閱讀官方的Android文檔 - 該文章完全描述瞭如何使用界面解決你的問題:https://developer.android.com/training/basics/fragments/communicating.html –

+0

Zawadzki謝謝,但我已經閱讀了這個。問題是我的項目中的每個活動都是空的,並且不能在活動內部做事。有沒有辦法只用Realm來解決這個問題,或者我必須弄清楚如何告訴我的第二個片段那個數據已經改變了 –

相關問題