2016-11-16 8 views
0

を更新doesntのこれが私のActivityAある観察可能なJavaオブジェクトが

public class ActivityB extends AppCompatActivity 
{ 
    private Mouse _mouse; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     ... 

     _mouse = Parcels.unwrap(getIntent().getParcelableExtra("Mouse")); 

     Log.v("AB", "X: "_mouse.posX); // This is 30 
    } 

    @Override 
    public void onClick(View v) 
    { 
     _mouse.posX = 100; 
     _mouse.NotifyObservers(); 

    } 
} 

は、最後に私のモデルは次のようになります。

public class Mouse extends Observable 
{ 
    public int posX; 

    public void NotifyObservers() 
    { 
     setChanged(); 
     notifyObservers(); 
    } 
} 

私は」することができますActivityAの「更新」が呼び出されないため、正常に動作しません。たぶん私は何かを忘れた?アクティビティ結果コードを使用せずに他のアクティビティからオブジェクトが更新されたときに通知する方法はありますか?

+0

メソッドの名前を正しく指定できませんでした。 'NotifyObservers()'は小文字で始まらなければなりません。メソッド内の呼び出しを 'super.notifyObservers();に変更する必要があります。そうでなければ、より大きなマッシンを実行するためにエンドレスループを作成します; o) –

+0

メソッドは正常です。オーバーライドされません。 –

答えて

1
  • まず最初は、あなたはちょうどあなたがParcels wrap and unwrapを使用して、あなたにMouseモデルparcelableを作った_mouse = new Mouse();

  • 二つ目の後_mouse.addObserver(this);をすることによって呼び出されるアップデートを取得するあなたのオブザーバーを登録する必要があります。あなたが使用しても、serializableは動作しません。あなたがobeserversのリストを持っているMouseクラスによって拡張Obervableであなたのリスナーを登録しているので

はparcelableまたは直列化可能ではありません。

ActivityBにモデルを渡すときは、古いリスナーActivityAが削除されます。

私の回答を確認するには、私が指示した_mouse.NotifyObservers();ActivityAから呼び出してください。

コールバックはupdateです。

+0

@TimothyTruckleあなたは間違っているよ。 #Dexはスーパーメソッド呼び出しを必要としない独自のnotifyObservers()を作成しました。 –

+0

あなたが答えを理解できない場合は、あなたのフィードバックを決してしないでください。 –

+0

こんにちは、問題は私のモデルをactivityAからactivityBに渡す必要があるということです。私はすでに.addObserverを追加しましたが、それでもまだ動作しません。 –