2013-12-22 43 views
3

我原本以爲我在做什麼,把握好,但每當我覺得我有東西了良好的手感,我證明是錯誤的:)我如何從一個匿名類訪問我的主類?

有問題的代碼是這樣的

@Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 




mButton = (Button)findViewById(R.id.m_button); 
mButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
      startActivity(intent); 
     } 
    }); 

    } 

我的困惑是在new Intent()startActivity方法。

我,只要我們在一個匿名類View.OnClickListener容器內工作,我不得不做這樣 MainActivity.this.startActivity(intent);

的東西時,我不是匿名內部類的假設下,我可以簡單地不要 new Intent(this,SecondActivity.class);

有人能解釋爲什麼我能夠調用startActivity();方法,但不能只用this的意圖參數?

回答

5

在匿名內部類this的情況下的this是匿名類本身。要從匿名用戶訪問外部類this,您需要執行OuterClassName.this

但是,內部類允許從外部類訪問變量和方法。內心階層是否是匿名的並不會造成什麼影響。

請參見:

I thought inner classes could access the outer class variables/methods?

Java nested inner class access outer class variables

這是靜態和非靜態內部類之間最重要的區別之一。

如果(例如)在兩個類中都有一個名稱相同的方法,則只需要類名,以便告訴您是哪個類。這就是this發生的事情,內部和外部類別都有this - 所以它默認爲內部類別,除非您另有說明。

+0

「但是允許內部類訪問外部類的變量和方法。」 所以這就是爲什麼我可以使用'startActivity'沒有OutClassName.this。對? –

+1

是的。請參閱編輯。 :) –

+0

非常感謝。 接受。 –

0

從你的內部類可以使用新的Intent(MainActivity.this, AnotherActivity.class)

因爲這是你的外活動,而不是內部類this

相關問題