0

リスナーを追加したActivitywith があります ( )。上記のリスナーからこのメソッド内にいるとき:ListViewsetOnItemClickListener

    public void onItemClick(AdapterView<?> parent, View view, int pos, long id )

アクティビティにアクセスできるようにするために、次のようにしました。

    MyActivity host = (MyActivity) parent.getContext();

変数からhost、すべてのMyActivityメソッドと属性 (静的ではない) にアクセスできますが、MyActivity.this参照にはアクセスできません。

誰かが私に理由を説明できますか? ありがとう

4

2 に答える 2

2

MyActivity.thisコードが内部クラスで実行されたときに、「外部」の MyActivity クラスのインスタンスを参照します。――そうですか。もしそうなら、なぜhost変数が必要なのですか?

更新:内部クラスMyActivity.this内から経由してアクセスするすべてのものに、特定のセットアップで経由してアクセスできるという事実を見落としている可能性があることに気付きました。host

更新:の意味を間違って理解しているようですthis。本来、これはこのオブジェクト、つまりコードが実行されるクラスを表します。

追加の表記法によりClass.this、Java を使用すると、コードの外部クラスのインスタンスにアクセスできますが、内部クラスからのみアクセスできます。

次の例では、Class.this動作します。

class A {
    int a;
    class B {
        void process_a_in_A() {
            A.this.a++;
        }
    }
    // however, this does NOT work b/c
    // static inner classes do not have references t oouter classes
    static class C {
        void process_a_in_A() {
            // error -- class A.C is detached from its outer class A
            A.this.a++;
        }
    }
}

また、次の例でClass.thisは機能しません。その理由は単純に、クラス A のインスタンスが存在するかどうか、および参照したいクラス A の多くのインスタンスのどれをシステムが認識できないかということです。

class A {
    int a;
}

class B {
    void process_a_in_A() {
        // A here is a class name, not an object reference;
        // so A.this is meaningless in this context
        A.this.a++;
    }
}

繰り返しますが、具体的に回答するために必要な情報を提供せずに質問したため、一般的な回答しかできず、内部クラスとClass.this表記について間違った認識を持っているようです。

于 2013-01-28T11:03:28.407 に答える
1

正確には、任意のクラス内で、その Name -> Name.this を介してそれ自体を参照できます (特に内部クラスに使用されます)。

変数ホストで参照されているオブジェクトが既にあるので、それを使用してみませんか?!

于 2013-01-28T11:05:38.910 に答える