2017-03-07 1 views
0

下記のコードでは、Play.thisではなく、何を書くことができるので、名前を書き込む必要なしにこのクラスの名前を使用することができます(この場合は「Play」)AlertDialog.Builder builder = new AlertDialog.Builder(Play.this);クラスの名前は自動的にどのように使用できますか?

+1

あなたはこれが表示される場所へともう少し文脈を示してもらえますか? 「クラス」とはどういう意味ですか? – tadman

+0

私は試してみました: 'AlertDialog.Builder builder = new AlertDialog.Builder(this.getClass()。this)'それはうまくいきませんでした。 –

+1

それは意味がありません... 'Context'変数が必要です。クラス '。そして 'getClass()。this'はコンパイルされません。 –

答えて

1

コンテキスト(this)を設定する前に、他に考えるべきことがあります。

まずケース - もし - あなたが活動/サービスのようなそのベースでコンテキストを拡張するクラスであり、そしてあなたが内部クラスでされていない場合は、あなただけの「この」

セカンドを使用することができますあなたはActivity/Servicesのようなベースでコンテキストを拡張するクラスに属していて、内部クラスにある場合、この場合のthisは内部クラスに関するため、(Play.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; 

はすなわちonCreate()でそれを初期化します。

mContext= this; 

とあなたからmContextを使用しますリスナーのコード

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

これは 'new View.OnClickListener'の中にあれば、' Play。 this ' –

+0

「コードはPlayクラスの一部です」をもう一度読んでください。あなたは内なる階級について話します。そしてそれは別のものです –

+0

内部クラスは「別のクラスの一部」です、IMO :) –

0

あなたが探しているものはthis.getClass().getName()だと思います。非修飾名のみを使用する場合は、代わりにthis.getClass().getSimpleName()を使用してください。私はAndroidについて特にほとんど分かっていませんが、それはあなたがJavaで一般的にやる方法です。

関連する問題