2012-07-18 49 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