Я разрабатываю приложение для Android.
У меня есть активность parentActivity
и subclass
для некоторых задач.
У меня также есть скрытый textView в parentActivity
. Я хочу показать этот textView из подкласса, но я не знаю, как это сделать.
Я думаю, что я могу вызвать метод parentActivity
из subclass
. Как я могу это сделать?
public class ParentActivity extends Activity
{
private SomeClass mSomeClass;
...
}
Я хочу вызвать parentActivity
из mSomeClass
.
В С# я использую для этого прослушиватель событий.
Мне нужно больше подробностей рассказать мне.
Спасибо.
Ваша 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)
Вы можете вызывать вызовы непосредственно в 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();
}
}
mSomeClass
не является "субактивностью" ParentActivity
. mSomeClass абсолютно ничего не знает о том, какие классы "содержат" его. Это довольно четкое указание на то, что ваш дизайн сильно испорчен. Что вы пытаетесь выполнить?