从其他类调用方法

时间:2012-02-12 09:24:40

标签: android class extends

嘿,我需要一些帮助,为什么我从ClassTwo调用changeText() 这是classOne

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)

3 个答案:

答案 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)

ClassTwoClassOne的孩子。它应该是同一种物体。默认的例子是家具。您有一个Table类(classone)和一个KitchenTable类,显然是表的子项。

现在很容易看出,一个kitchenableable可以做一个表可以做的相同的事情,但你要做的是在table类中调用可重复使用的代码。这很奇怪,因为并非所有的桌子都是厨房用具。如果桌子是露营桌怎么办?

回到现实世界:如果你想要这个结构,你应该在classtwo self中完成所有特定于classTwo的调用。如果你不这样做,那么你可能想要一些不会以这种方式扩展的东西:记住,如果你new ClassTwo,你正在创建一个新的activity!这个活动是从classtwo到calssone的点,有一个classtwo等等。

您可能需要重新定义您的类结构。找出你想要的,为什么你想要它等等。

答案 2 :(得分:0)

这是我的代码问题:

  • ClassTwo扩展了ClassOne [它不应该,特别是如果你在ClassOne中创建ClassTwo的实例]

要从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
   }
}