2012-07-27 94 views
0

我有一個叫做BaseActivity的抽象類(extends Activity),它具有函數Android活動抽象方法調用

public abstract void onLocationChanged();

所有其他活動擴展了這個類。當我調用BaseActivity的方法onLocationChanged()時,我期望所有實現此方法的其他類都會調用它們的onLocationChanged()方法或至少是當前位於堆棧頂部的活動,但似乎只有一個活動會調用方法,它不是堆棧頂部的那個。

有人可以幫忙嗎?

這裏是我的代碼的相關部分:

abstract class BaseActivity extends FragmentActivity { 
public static MyLocation location = null; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (location == null) { 
     location = new MyLocation(this); 
    } 
} 
public abstract void onLocationChanged(); 
} 

public class MyLocation { 
    BaseActivity parrent; 
    public MyLocation(BaseActivity act) {   
     public MyLocation(BaseActivity act) {  
     this.parrent = act;  
    } 
    public void refreshMyLocation() { 
    /*location get refreshed here*/ 
    this.parrent.onLocationChanged(); 
    } 
} 

public class MainActivity extends BaseActivity { 
@Override 
public void onStart() { 
     BaseActivity.location.refreshMyLocation(); 
} 

public void onLocationChanged() { 
    /*some stuff*/ 
} 
} 
+0

顯示一些代碼。就像你如何調用這個方法一樣。 – 2012-07-27 15:50:39

回答

2

您是在位置上基本活動的一個實例改變不是所有的人立刻打電話。沒有你的代碼,我不知道哪一個。但是簡單地在基類中聲明一個方法並不意味着它會在每個實現它的類上調用。

+0

我想問題是我對原理的理解。你有什麼想法如何做不同?問題是,我有我的應用程序中的「更新位置」按鈕,從中獲取當前位置的BaseActivity靜態方法。我想通知位置已更改的屏幕上的任何活動。 – ppavel 2012-07-28 07:25:17

+0

是的,我認爲這可能是Java的基本理解。但上面提出的建議應該可行 - 查看LocalBraodcastManager並使用Broadcast Receivers。當位置偵聽器獲取一個位置時,它可以在意圖中廣播該位置,並且您的所有活動都可以在他們的onResume方法中註冊一個接收者,並在暫停時取消註冊它們。 – Kaediil 2012-07-28 15:10:01

0

我不明白你爲什麼想這樣做。我認爲你應該需要一個實現onLocationChanged並通過Handler或BroadcastReceiver與活動進行通信的Serivice。