我有两个名为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来使用。
答案 0 :(得分:0)
问题是这个
abc x= new abc();
您不应创建以这种方式扩展Activity
的对象的实例。您应该使用startActivity
或startActivityForResult
此外,您根本不应该在另一个活动的实例中保存对一个活动的引用,因为活动是由Android创建和销毁的,因此您持有的活动可能会过时。参见Android Activity Lifecycle`。只需旋转设备就足以实现这一目标。
在教程“构建您的第一个应用”中,我们有start another activity,假设您确实想启动另一个活动。您需要了解意图;让我引用该链接:
Intent是一个对象,它在单独的组件(例如两个活动)之间提供运行时绑定。意图表示应用程序的“意图做某事”。
答案 1 :(得分:0)
感谢您的所有评论。我找到了解决方案。在def类中,我没有使用
来扩展Activity public class def extends abc
使类“ def”成为“ abc”的子类。然后在行
super.onCreate(savedInstanceState);
在“ def”类中,我添加了下面显示的一行来完成这项工作。
super.test("lol123");
答案 2 :(得分:-1)
这些类在同一包中吗? (我假设它们在同一个程序包中,因为您没有String paths
的公共入口)
如果某个方法是公共的,则应该可以从任何地方调用它。
所以我想您的测试用例有问题。
尝试使用不扩展Activity
且仅具有测试所需方法的类。然后,进一步扩展测试用例,直到停止工作。
路径变量是否为final?
您可能要向其中添加public static final
修饰符。