0

我有一个ActivityListView已经添加了一个监听器(setOnItemClickListener)的。当我从上面提到的侦听器中进入此方法时:

    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 引用自身(尤其用于内部类)

由于您已经在变量 host 中引用了您的对象,为什么不直接使用它呢?!

于 2013-01-28T11:05:38.910 回答