вызов методов из других классов - PullRequest
0 голосов
/ 12 февраля 2012

эй, мне нужна помощь, почему я не могу вызвать changeText () из ClassTwo вот 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();

    }
}

а вот класс два

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 голосов
/ 12 февраля 2012

ClassTwo является ребенком ClassOne.Предполагается, что это один и тот же объект.Примером по умолчанию будет мебель.У вас есть класс Table (classone) и класс KitchenTable, который, очевидно, является дочерним элементом таблицы.

Теперь легко видеть, что кухонный стол может делать то же, что и столделайте, но то, что вы пытаетесь сделать, это вызвать код kitchentable внутри класса таблицы.Это странно, потому что не все столы на самом деле являются кухонными столами.Что, если стол будет кемпинговым столом?

Итак, вернемся в реальный мир: если вам нужна эта структура, вы должны делать все вызовы, специфичные для вещей classTwo в classtwo self.Если вы этого не сделаете, то, возможно, вы захотите что-то, что не было выпущено таким расширенным способом: помните, если вы делаете new ClassTwo, вы создаете новый activity!Это задание - от classtwo до calssone, в котором есть classtwo и т. Д. И т. Д.

Возможно, вам необходимо переопределить структуру вашего класса.Узнайте, чего вы хотите, почему вы этого хотите и т. Д.

0 голосов
/ 12 февраля 2012

Вот моя проблема с вашим кодом:

  • ClassTwo расширяет ClassOne [не должно, особенно если вы создаете экземпляр ClassTwo в ClassOne]

Toвызовите метод из 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
   }
}
0 голосов
/ 12 февраля 2012

Проблема в том, что, хотя ClassTwo расширяет ClassOne, ваш экземпляр classTwo не инициализируется должным образом как действие.Это не часть иерархии представления, поэтому findViewById ничего не вернет.(Вы не должны создавать экземпляр подкласса Activity, вызывая new и ожидать, что какой-либо из методов 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");
    }
}
...