2016-11-16 9 views
0

私はレルムを使用してEditTextのユーザー入力をフラグメント1に保存し、その入力をフラグメント2のTextViewに表示します。ユーザーが最初のフラグメント内のボタンをクリックすると、内側の第2の断片。レルムは古いオブジェクトを使用していて、更新していません

すべてはうまく見えますが、私がアプリケーションを昼食するたびに、オブジェクトを保存する前にクエリが実行され、古い入力がTextView内に表示されます。

  • 私はいくつかの入力を入力すると、古いテキストが既に保存され、ここでのTextView

内 を示してきたが、フラグメント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(); 

} 

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


} 

Modelクラス:それは起動時に

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.Withの中のリストとしてプログラムで追加しました。getEmail()の前にボタンのクリックを実行するにはどうすればいいですか? –

+0

フラグメントはTabFragment(ViewPager)内にあり、それらは同時に作成されます。仲間を助けるための@RafałZawadzkithx –

答えて

0

2番目のフラグメントは、最初のフラグメントからのonClickイベントが発生する前に、つまり、データを照会(理由はここに は、クエリとフラグメント2内のテキストを設定するための方法であり、両方の断片はほぼ同時に作成されます)。

最初のデータでデータが変更されたことを第2のフラグメントに通知する必要があります。 :例えば、その達成の多くの方法があります

  • インタフェース
  • イベントバス(オットー、EventBus)
  • 反応プログラミング
もっとたくさんおそらくあり

が、これらのいずれかの意志十分である;)

+0

Zawadzkiは私を助けてくれてありがとう。私は同じ考えを持っていたが、これに対する解決策を見つけることができなかった。私はまだジュニアデベロッパーですので、データが変更されたことを2番目のフラグメントに知らせる方法は本当に分かりません.Fragment2のパブリックメソッドや他のいくつかのソリューションに関する詳細を教えてください。 –

+0

これはあなたのケースによって異なりますが、公式のAndroidドキュメントを読むことをお勧めします。この記事では、インターフェイスを使用して問題を解決する方法を正確に説明しています:https://developer.android.com/training/basics/fragments/communicating.html –

+0

Zawadzkiありがとうしかし、私はすでにこれを読んでいました。問題は、私のプロジェクトのすべての活動が空であり、アクティビティの中ではできないことです。レルムを使ってのみこれを解決する方法はありますか、そのデータが変更されました –

関連する問題