我有两项活动。我需要调用Activity B中活动A中创建的函数。 我第一次做的是: 在活动A中,我创建了我的函数:
public double [] getRSS(double [] queryC){
if (wifiList!=null){
for (int i=0; i<wifiList.size(); i++){
switch (wifiList.get(i).BSSID){
case "56:2e:27:43:4b:f5" : queryC [0]= + wifiList.get(i).level ; break;
case "20:18:d8:4f:55:e8": queryC [1] = + wifiList.get(i).level ; break;
case "7c:e9:d3:31:8f:b9": queryC [2] = + wifiList.get(i).level ; break;
}
}
}
return queryC;
}
活动B中的:
public class ActivityB extends ActivityA{
.......
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activiteb);
.......
ActivityA w = new ActivityA();
double [] query= w.getRSS(queryC);
.......
}
}
然后有时它有时不起作用! 我检查了这个答案Can i Create the object of a activity in other class?,我做了同样的事情:
static ActivityA ActivityA;
然后:
ActivityA = this;
public static ActivityA getInstance() { return ActivityA; }
但我在这里说错误:
令牌上的语法错误&#34; ActivityA&#34;,@ expected 当我将第二课改为此时:
类型,方法getInstance()未定义ActivityA.getInstance().getRSS(queryC);
我明白了: 对于ActivityA
答案 0 :(得分:0)
一项活动永远不应该引用另一项活动的实例。需要在两者之间传递的任何数据都应该通过用于启动第二个活动的Intent完成,或者放入单例数据结构中。
答案 1 :(得分:0)
不要走这条路!对于每个活动,附加生命周期并手动创建它只会导致问题。存储活动本身的实例只会造成不应该发生的泄漏。
尝试在与活动无关的类中实现getRSS()
,可能使用getApplicationContext()
。如有必要,请静态存储您需要的数据,或通过其意图将其移交给ActivityB
。
也不要使用与该字段的ActivityA
类相同的名称。
答案 2 :(得分:-2)
public class YourApplication extends Application {
private static YourApplication mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
public static YourApplication getInstance() {
return mInstance;
}
public double [] getRSS(double [] queryC){
if (wifiList!=null){
for (int i=0; i<wifiList.size(); i++){
switch (wifiList.get(i).BSSID){
case "56:2e:27:43:4b:f5" : queryC [0]= + wifiList.get(i).level ; break;
case "20:18:d8:4f:55:e8": queryC [1] = + wifiList.get(i).level ; break;
case "7c:e9:d3:31:8f:b9": queryC [2] = + wifiList.get(i).level ; break;
}
}
}
return queryC;
}
}
在您的ActivityA类中,
YourApplication.getInstance().getRSS(queryC)
在ActivityB类中,您可以以相同的方式访问。
希望这会对你有所帮助。
感谢。
答案 3 :(得分:-3)
使用super关键字调用ActivityA的方法,如:
/sass
希望这会有所帮助。