[英]Why can't i access method from another class but can access variable?
我有两个名为 abc 和 def 的类。 类 abc 具有名为“paths”的字符串和名为“test”的函数。 我可以轻松地使用另一个类“def”中的变量“paths”,但似乎无法从类“def”中调用函数“test”。
我在类 def 中创建了类 abc 的对象并尝试调用该函数,但它不起作用。
public class abc extends Activity {
String paths="path";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
test("lol");
}
public void test(String name){
Toast.makeText(abc.this,name,Toast.LENGTH_LONG).show();
}
}
public class def extends Activity {
abc x= new abc();
String paths=x.paths;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toast.makeText(def.this,paths,Toast.LENGTH_LONG).show();// This is
//working
x.test("hahahas"); // Not working
}
}
我希望来自类 abc 的方法“测试”被类 def 使用,从类 def 传递参数。
问题是这个
abc x= new abc();
您不应该以这种方式创建扩展Activity
的东西的实例。 您应该使用startActivity
或startActivityForResult
此外,您根本不应该在另一个活动的实例中持有对另一个活动的引用,因为活动是由 Android 创建和销毁的,因此您持有的对它的引用可能会过时。 请参阅Android 活动生命周期`。 只需旋转您的设备就足以实现这一目标。
从教程“构建您的第一个应用程序”我们开始了另一个活动,假设您确实想要启动另一个活动。 你需要了解意图; 让我引用那个链接:
Intent 是一个对象,它在不同的组件(例如两个活动)之间提供运行时绑定。 Intent 表示应用程序的“意图做某事”。
谢谢你们的评论。 我找到了解决方案。 在类 def 中,我没有使用扩展 Activity
public class def extends abc
制作类“def”子类“abc”。 和线后
super.onCreate(savedInstanceState);
在“def”类中,我添加了如下所示的一行来完成这项工作。
super.test("lol123");
这些类是否在同一个包中? (我假设它们在同一个包中,因为你没有公开的String paths
)
如果一个方法是公共的,你应该可以从任何地方调用它。 所以我猜你的测试用例有问题。 尝试使用不扩展Activity
并且只有测试所需方法的类。 然后进一步扩展您的测试用例,直到它停止工作。
路径变量是最终的吗? 您可能希望向其添加public static final
修饰符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.