2016-11-16 143 views
0

這是我ActivityA:可觀察java對象犯規更新

public class ActivityA extends AppCompatActivity implement Observer 
{ 

    private Mouse _mouse; 

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

     _mouse = new Mouse(); 
     _mouse.posX = 30; 
     _mouse.addObserver(this); 


    } 
    @Override 
    public void onClick(View v) 
    { 
     Intent intent = new Intent(ActivityA.this, ActivityB.class); 
     intent.putExtra("Mouse", Parcels.wrap(mouse)); 
     startActivity(intent) 
    } 

    @Override 
    public void update(Observable o, Object arg) 
    { 
     // Never get called. 
     Log.e("TAG", "We're updating the object"); 
    } 
} 

這是我ActivityB:

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()'必須以小寫字母開頭(因爲每個方法名都應該在Java中)。那麼你也必須修改方法內部的調用到'super.notifyObservers();否則你創建一個無限循環,你可能需要一個更大的主機來成功執行......; o) –

+0

該方法很好,是沒有被淹沒。 –

回答

1
  • 第一件事,你只需要後,你已經使用Parcels wrap and unwrap讓你Mouse模型parcelable_mouse = new Mouse();

  • 第二件事你觀察者註冊獲得更新做_mouse.addObserver(this);調用。甚至你已經使用serializable它不起作用。

因爲您註冊聽衆中ObervableMouse類具有obeservers列表擴展不parcelable或序列化。

因此,無論何時您將模型傳遞給ActivityB,舊的偵聽器ActivityA都將被刪除。

要檢查我的答案,請執行我已經指出的第一步,並從ActivityA本身調用_mouse.NotifyObservers();

你會得到回調update

+0

@TimothyTruckle你錯了。 #Dex製作了自己的notifyObservers(),它不需要任何超級方法調用。 –

+0

如果您不明白答案,請不要對此提出反饋意見或不要標記。 –

+0

你好,問題是我需要將我的模型從activityA傳遞給activityB ..我已經添加了.addObserver,但仍然不起作用。 –