public class ClassOne extends Activity {
/** Called when the activity is first created. */
ClassTwo classTwo = new ClassTwo();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
classTwo.changeText();
}
}
这里是classTwo
public class ClassTwo extends ClassOne {
public void changeText(){
TextView textOne = (TextView) findViewById(R.id.textview1);
textOne.setText("this is how we call methods from other classes");
}
}
错误发生在
com.game.ClassTwo.<init>(ClassTwo.java:5)
com.game.ClassTwo.<init>(ClassOne.java:10)
答案 0 :(得分:0)
问题在于,当ClassTwo
扩展ClassOne
时,您的实例classTwo
未作为活动正确初始化。它不是视图层次结构的一部分,因此findViewById
不会返回任何内容。 (你不应该通过调用new
创建一个Activity子类的实例,并期望任何Android方法做任何有用的事情。)
重新设计代码,使ClassTwo
不是Activity子类,并重新设计changeText()
以接受Activity
实例作为参数。例如:
package com.game;
import android.widget.TextView;
public class ClassTwo {
public void changeText(ClassOne activity) {
TextView textOne = (TextView) activity.findViewById(R.id.textview1);
textOne.setText("this is how we call methods from other classes");
}
}
答案 1 :(得分:0)
ClassTwo
是ClassOne
的孩子。它应该是同一种物体。默认的例子是家具。您有一个Table
类(classone
)和一个KitchenTable
类,显然是表的子项。
现在很容易看出,一个kitchenableable可以做一个表可以做的相同的事情,但你要做的是在table类中调用可重复使用的代码。这很奇怪,因为并非所有的桌子都是厨房用具。如果桌子是露营桌怎么办?
回到现实世界:如果你想要这个结构,你应该在classtwo self中完成所有特定于classTwo
的调用。如果你不这样做,那么你可能想要一些不会以这种方式扩展的东西:记住,如果你new ClassTwo
,你正在创建一个新的activity
!这个活动是从classtwo到calssone的点,有一个classtwo等等。
您可能需要重新定义您的类结构。找出你想要的,为什么你想要它等等。
答案 2 :(得分:0)
这是我的代码问题:
要从ClassOne调用方法,您可以使用“super”关键字。例如,
class ClassOne{
public void myMethod() {
// do stuff
}
}
class ClassTwo extends ClassOne{
@Override public void myMethod() {
super.myMethod(); //call myMethod from ClassOne
// add more stuff
}
}