2017-03-07 121 views
0

在下面的代碼中,我可以寫什麼來代替Play.this,以便它可以自動使用它所使用的類的名稱,而無需寫入名稱(在本例中爲「播放」)AlertDialog.Builder builder = new AlertDialog.Builder(Play.this);如何自動使用班級名稱?

+1

你能不能給多一點上下文到這似乎? 「這個班」是什麼意思? – tadman

+0

我試過使用: 'AlertDialog.Builder builder = new AlertDialog.Builder(this.getClass()。this)'但它沒有工作 –

+1

這沒有任何意義......你需要一個'Context'變量,而不是' Class'。和'getClass()。這個'不能編譯 –

回答

1

設置上下文(此處)前還有其他事情需要考慮。

第一種情況 - 如果你是在擴展其基礎樣活性/服務上下文中的某一類,你是在一個內部類,你可以用「這個」

二 - 如果你在一個擴展基類的上下文的類中,比如Activity/Services,並且你在一個內部類中,你可以使用(Play.this),因爲在這種情況下,「this」是關於內部類的。

三 - 如果你是在另一個類不具有一個背景下,你可以通過它在構造函數或方法,如:

class Test { 
    public void createBuilder(Context context) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    } 
} 
1

沒有理由在Play類的代碼中使用Play.this。只需使用this

AlertDialog.Builder builder = new AlertDialog.Builder(this); 

但是,如果你想要做的是從你的內部類,那麼你需要this不會指向Context子類,這樣你就可以即在父類的創建成員,即:

Context mContext; 

初始化它在IE onCreate()

mContext= this; 

,並使用mContext從聽衆的代碼

AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
+1

如果這是在'new View.OnClickListener'內,那麼,是的,你需要'Play。這個' –

+0

再次閱讀'代碼是Play類的一部分'。你談論內心階層。這是不同的 –

+0

內部類是「另一類的一部分」,IMO :) –

0

我認爲你要找的是this.getClass().getName()。如果您只需要非限定名稱,請改爲使用this.getClass().getSimpleName()。我對Android很少了解,但這就是通常在Java中這樣做的方式。