如何从一个活动调用另一个活动的非静态方法

6

我有两个活动,并且我想从B中调用一个名为clear的方法。我尝试了以下代码,但是遇到了空指针异常。

class A extends Activity {
    ...
    public void clear(){}

}

class B extends Activity{
    public void clearData() {
        A a=new A();
        a.clear();
    }        
}

只需创建一个AppActivity,并将其扩展到你的A和B两个活动中。现在将这个函数放在这个新的活动中。它对你来说非常容易访问。 - Rahul Sharma
你不能创建一个新的活动类对象,只能获取当前A活动的实例并在该实例上调用clear()方法。 - Aman Grover
1个回答

21
class A extends Activity{
static A instance;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    instance = this;
}

public static A getInstance() {
    return instance;
}
....
public void clear(){}

}

并且在 B 类中:

class B extends Activity {
  public void  clearData(){
      A a = A.getInstance();
      a.clear();
    }
}

2
好的解决方案,我不知道非静态方法可以这样调用。我不知道为什么人们会对这样的答案投反对票。 - Abhishek Pandey
您已经将它设为静态的了,所以在未来堆或PermGen内存中会发生内存泄漏吗? - Madhusudhan Aradya
1
@MadhusudhanAradya 是的,肯定会有内存泄漏问题,因为静态变量将保留“Activity”上下文,即使“Activity”不再存在。那时这是我能想到的最好的解决方案。我将来会更新这个答案,提供更有效的解决方案。 - Aman Grover
@Aman Grover,有没有不需要将函数设为静态的优化解决方案? - Madhusudhan Aradya
@MadhusudhanAradya 你可以创建自己的监听器,它们基本上是接口,用于从另一个活动中调用方法。 - Aman Grover

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接