web-dev-qa-db-ja.com

onClick(DialogInterface v、int buttonId)内のコンテキストを取得しますか?

ボタンのonClick(View view)のコールバックであるonClickListener()内のコンテキストを取得するのは簡単です。

view.getContext()

しかし、dialog 's onClickListenerのコールバックであるonClick(DialogInterface v, int buttonId)内でコンテキストを取得する方法がわかりません。

public class MainActivity extends Activity implements Android.content.DialogInterface.OnClickListener

これは可能ですか?

60
an00b

DialogInterface.OnClickListenerを匿名クラスとして定義すると、外部コンテキストを参照できます。アクティビティに参加している場合は、MyActivity.thisをコンテキストとして使用できます。

編集-アクティビティはDialogInterface.OnClickListenerを実装しているので、コンテキストとしてthisを使用することができます。

101
Matthew Willis

DialogInterfaceがMainActivity内にある場合、次を使用してコンテキストを取得できます。

MainActivity.this.getActivityContext();

ところで、DialogInterfaceを実装することもできます(コードサンプルでは、​​実装を2回記述しました)。同じステートメントを使用して、アクティビティコンテキストを取得できます。

18
Karan

ここにあなたがそれをする方法があります

  1. 匿名クラスを使用したくない
  2. または、アクティビティ/フラグメントにインターフェースを直接実装させます。

ただ、

  1. dialogInterfaceオブジェクトを使用して、Dialogオブジェクトにキャストします
  2. 次にgetContext()を呼び出します

DialogInterface.OnClickListener の例:

DialogInterface.OnClickListener foo = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int which) {
        Dialog dialog  = (Dialog) dialogInterface;
        Context context = dialog.getContext();
        // do some work with context
    }
};

これは、次のインターフェイスでも機能します。最初のparam DialogInterface dialogInterfaceとキャスト。

13
petey

setOnClickListener内

これをクラスの下で減速する

_Context context = this;_

このコンテキストを使用します

AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);

0
Oscar Fernando