Android活动抽象方法调用

问题描述:

我有一个叫做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

您是在位置上基本活动的一个实例改变不是所有的人立刻打电话。没有你的代码,我不知道哪一个。但是简单地在基类中声明一个方法并不意味着它会在每个实现它的类上调用。

+0

我想问题是我对原理的理解。你有什么想法如何做不同?问题是,我有我的应用程序中的“更新位置”按钮,从中获取当前位置的BaseActivity静态方法。我想通知位置已更改的屏幕上的任何活动。 – ppavel 2012-07-28 07:25:17

+0

是的,我认为这可能是Java的基本理解。但上面提出的建议应该可行 - 查看LocalBraodcastManager并使用Broadcast Receivers。当位置侦听器获取一个位置时,它可以在意图中广播该位置,并且您的所有活动都可以在他们的onResume方法中注册一个接收者,并在暂停时取消注册它们。 – Kaediil 2012-07-28 15:10:01

我不明白你为什么想这样做。我认为你应该需要一个实现onLocationChanged并通过Handler或BroadcastReceiver与活动进行通信的Serivice。