2011-01-05 224 views
1

我正在开发一个Android应用程序。属性类如何在Java中为其“父”类调用方法?

对于某些任务,我有一个活动parentActivitysubclass。我也有一个隐藏的textView parentActivity。我想从子类中显示这个textView,但我不知道该怎么做。

我想我可以从subclass调用parentActivity方法。我怎样才能做到这一点?

public class ParentActivity extends Activity 
{ 
    private SomeClass mSomeClass; 

    ... 
} 

我想打电话给ParentActivitymSomeClass

在C#中我使用事件侦听器来做到这一点。

我需要更多的细节告诉我。

谢谢。

+0

我觉得你很困惑关于什么子类。你如何向我们展示一些代码。 – Falmarri 2011-01-05 19:32:13

+0

@Falmarri:我刚刚添加了一个例子。抱歉。 – VansFannel 2011-01-05 19:37:44

回答

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

我要检查它。 – VansFannel 2011-01-05 19:56:49

+0

很棒!谢谢你,兄弟! – 2013-05-11 13:32:48

2

如果SomeClass是一个非静态的ParentActivity内部类,那么您只能从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

对不起,我没有解释得很好。我刚刚为我的问题添加了一个示例。 – VansFannel 2011-01-05 19:38:27

1

mSomeClass不是的ParentActivity “子活动”。 mSomeClass绝对不知道什么类“包含”它。这是一个非常明显的迹象,表明您的设计存在严重缺陷。你试图完成什么?

+0

mSomeClass是一个使用C++渲染东西的OpenGL渲染器。从C++我可以从mSomeClass调用一个方法,但我需要从parentActivity调用一个方法来显示一个TextView。 – VansFannel 2011-01-05 19:43:34

+0

我的答案取决于你不能改变mSomeClass的事实。如果您是制作mSomeClass并可以更改构造函数的人,您可以像@Sarwar所建议的那样执行,并将指针传递给您的父类。只要小心存储对上下文的引用,因为这可能导致内存泄漏。然而,在包含该特定对象的对象中没有调用方法的一般方法。 – Falmarri 2011-01-05 20:34:32

+0

和选秀者呢? http://tseng-blog.nge-web.net/blog/2009/02/17/how-implement-your-own-listener-android-java/ – VansFannel 2011-01-06 07:42:12