Как класс свойства может вызывать метод для своего «родительского» класса в Java?

1

Я разрабатываю приложение для Android.

У меня есть активность parentActivity и subclass для некоторых задач.

У меня также есть скрытый textView в parentActivity. Я хочу показать этот textView из подкласса, но я не знаю, как это сделать.

Я думаю, что я могу вызвать метод parentActivity из subclass. Как я могу это сделать?

public class ParentActivity extends Activity
{
   private SomeClass mSomeClass;

   ...
}

Я хочу вызвать parentActivity из mSomeClass.

В С# я использую для этого прослушиватель событий.

Мне нужно больше подробностей рассказать мне.

Спасибо.

  • 0
    Я думаю, вы не понимаете, что такое подклассы. Как насчет того, чтобы показать нам код?
  • 0
    @Falmarri: я только что добавил пример. Сожалею.
Теги:
events

3 ответа

4
Лучший ответ

Ваша ParentActivity остается такой же

public class ParentActivity extends Activity
{
   private SomeClass mSomeClass;
}

Требуется небольшое изменение в вашем SomeClass

class SomeClass extends XYZ
{
    ParentActivity parent;        

    SomeClass(ParentActivity p)   //Constructor
    {
       this.parent = p;
       ......
    }

    public void someMethodWhereParentAccessIsRequired()
    {
        .....
        parent.doSomethingOnSomeTextView();
        ....
    }

}

Наконец, когда вы инициализируете mSomeClass внутри ParentActivity:

mSomeClass = new SomeClass(this)
  • 0
    Я собираюсь проверить это.
  • 0
    работает отлично!!! Спасибо, мужик!
2

Вы можете вызывать вызовы непосредственно в ParentActivity из SomeClass, если SomeClass - нестационарный внутренний класс ParentActivity.

public class ParentActivity {

  protected void parentActivityMethod() {
    System.out.println( "Method called" );
  }

  protected class InnerSomeClass { // This could extend SomeClass
    protected void callParentMethod() {
      parentActivityMethod();
    }
    // Maybe override SomeClass methods to invoke ParentActivity methods?
  }

  private InnerSomeClass someClass;

  public ParentActivity() {
    this.someClass = new InnerSomeClass();

    someClass.callParentMethod(); // Will print "Method called"
  }


}

Это требует, чтобы someClass создавался в пределах ParentActivity.

В качестве альтернативы, когда вы создаете экземпляр своего объекта SomeClass, вы можете передать ссылку на объект ParentActivity. Это также требует, чтобы вы отредактировали определение SomeClass.


Оригинальный ответ (больше не применяется):

Вы можете вызвать методы суперкласса с помощью ключевого слова super.

Краткий пример:

public class Parent {
  protected String s1;
  protected void m1() {
    System.out.println( "PARENT M1" );
  }
}

public class Child extends Parent {

  protected void m1() {
    System.out.println( "CHILD M1" );
  }

  public String doSomething() {
    super.m1(); // Prints PARENT M1
    m1(); // Prints CHILD M1

    return s1; // Same as super.s1 because s1 has not been redeclared

  }

  public static void main( String args[] ) {
    new Child().doSomething();
  }

}
  • 0
    Извините, я не очень хорошо объяснил. Я только что добавил пример к своему вопросу.
1

mSomeClass не является "субактивностью" ParentActivity. mSomeClass абсолютно ничего не знает о том, какие классы "содержат" его. Это довольно четкое указание на то, что ваш дизайн сильно испорчен. Что вы пытаетесь выполнить?

  • 0
    mSomeClass - это рендерер OpenGL, который использует C ++ для рендеринга чего-либо. Из C ++ я могу вызвать метод из mSomeClass, но мне нужно вызвать метод из parentActivity, чтобы показать TextView.
  • 0
    Мой ответ зависит от того, что вы не можете изменить mSomeClass. Если вы создаете mSomeClass и можете изменить конструктор, вы можете сделать то, что предлагает @Sarwar, и передать указатель на ваш родительский класс. Просто будьте осторожны с хранением ссылок на контексты, так как это может вызвать утечку памяти. Однако нет ОБЩЕГО способа вызова методов в объектах, которые содержат этот конкретный объект.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню