2012-07-18 93 views
4

下面是示例代码:如何从不使用外部类名的内部类获取对外部类的引用?

Class SomeClass extends Activity { 
    public void someMethod() { 
     Runnable r = new Runnable() { 
      public void run() { 
       Intent service = new Intent(SomeClass.this, SomeOtherClass.class); 
       // ... 
      } 
     } 
    } 
} 

我如何更改代码SomeClass(在new Intent(SomeClass.this, ...))不能使用? 我想把这个示例放在多个类中,我不想每次都使用不同的类名。

回答

3

简短的表达方式(建议):

在你的意图更换SomeClass.thisgetApplicationContext()应该做的伎俩。

方法我用的(多一点拉出并可能不是最好的两个):

在每一节课,使private Context mContext;
然后,在每个类的onCreate(),使mContext = this;
最后,将您的意图中的SomeClass.this替换为mContext

+2

这个答案很好,并且提供了很好的解决方案,但是我想提一下,使用mContext保持对上下文的引用应该谨慎。它很容易导致记忆韭菜。 – 2012-07-18 15:47:21

+0

解决方案是可以接受的...似乎我会用它,谢谢......但是有没有一种纯粹的java方式来访问外部类没有任何私人领域和调用超类的任何方法(在这种情况下'活动')? – Prizoff 2012-07-18 15:53:05

+0

如果您有多个类在其中创建一个字段来存储对上下文的引用,静态获取上下文可能是一个优选的方式: http://stackoverflow.com/questions/2002288/static-way-to-获得上下文上,机器人 – 2015-10-26 13:22:16