2011-01-05 15 views
1

私はAndroidアプリケーションを開発しています。どのようにして、プロパティークラスはJavaの '親'クラスのメソッドを呼び出すことができますか?

私はアクティビティがparentActivitysubclassです。

また、私はparentActivityに隠れたtextViewを持っています。私はこのtextViewをサブクラスから見たいと思っていますが、それをどうやって行うのか分かりません。

私はparentActivityメソッドをsubclassから呼び出すことができると思います。どうやってやるの?

public class ParentActivity extends Activity 
{ 
    private SomeClass mSomeClass; 

    ... 
} 

私はmSomeClassからParentActivityを呼び出したいです。

C#ではイベントリスナーを使用しています。

私に詳細を教えてください。

ありがとうございました。

+0

は、私はあなたが混乱していると思いますサブクラスが何であるかについて。あなたは私たちにいくつかのコードを見せてどうですか? – Falmarri

+0

@Falmarri:例を追加しました。ごめんなさい。 – VansFannel

答えて

4

あなたParentActivityは同じまま

あなた工assで

小さな変更が必要とされ

public class ParentActivity extends Activity 
{ 
    private SomeClass mSomeClass; 
} 

最後に
class SomeClass extends XYZ 
{ 
    ParentActivity parent;   

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

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

} 

、あなたがParentActivity内mSomeClassを初期化します。

mSomeClass = new SomeClass(this) 
+0

私はそれをチェックするつもりです。 – VansFannel

+0

はうまくいきます!ありがとう、男! –

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" 
    } 


} 

これはsomeClassParentActivity内でインスタンス化されている必要があります。

また、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

1

mSomeClassParentActivityの "subactivity" ではありません。 mSomeClassは、どのクラスがそれを「含む」かについて何も知らない。これは、あなたのデザインに深刻な欠陥があることを明確に示しています。あなたが達成しようとしていることは何ですか?

+0

mSomeClassは、C++を使って何かをレンダリングするOpenGLレンダラです。私はmSomeClassからメソッドを呼び出すことができますが、TextViewを表示するにはparentActivityからメソッドを呼び出す必要があります。 – VansFannel

+0

私の答えは、あなたがmSomeClassを変更できないという事実に依存します。あなたがmSomeClassを作っていて、コンストラクタを変更できるなら、@ Sarwarがあなたの親クラスへのポインタを示唆して渡すようにすることができます。コンテキストがメモリリークを引き起こす可能性があるので、コンテキストへの参照を格納することに注意してください。しかし、その特定のオブジェクトを含むオブジェクトにメソッドを呼び出す一般的な方法はありません。 – Falmarri

+0

とlisternersはどうですか? http://tseng-blog.nge-web.net/blog/2009/02/17/how-implement-your-own-listener-android-java/ – VansFannel

関連する問題