13

カスタムダイアログを作成しました。[OK]をクリックしたときに新しいアクティビティを開始したいと思います。インテントコンストラクターの最初の引数として設定するコンテキストを取得するにはどうすればよいですか?

を使用してインテントを作成できますが、をgetContext()呼び出すことはできませんstartActivity。ダイアログを呼び出すアクティビティをダイアログのコンストラクターに渡しますか?ダイアログをクリックしてアクティビティを開始する通常の方法ですか?

public class CustomDialog extends Dialog implements OnClickListener {
    Button okButton, cancelButton;

    public CustomDialog(Context context) {      
        super(context);     
        setContentView(R.layout.custom_dialog);
        okButton = (Button) findViewById(R.id.button_ok);
        okButton.setOnClickListener(this);
        cancelButton = (Button) findViewById(R.id.button_cancel);
        cancelButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {       
        if (v == cancelButton)
            dismiss();
        else {
            Intent i = new Intent(getContext(), ItemSelection.class);
            startActivity(i); //The method startActivity(Intent) is undefined for the type CustomDialog
        }
    }
}
4

7 に答える 7

19
public class CustomDialog extends Dialog implements OnClickListener {
  Button okButton, cancelButton;
  Activity mActivity;

  public CustomDialog(Activity activity) {      
    super(activity);
    mActivity = activity;
    setContentView(R.layout.custom_dialog);
    okButton = (Button) findViewById(R.id.button_ok);
    okButton.setOnClickListener(this);
    cancelButton = (Button) findViewById(R.id.button_cancel);
    cancelButton.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {       
    if (v == cancelButton)
        dismiss();
    else {
        Intent i = new Intent(mActivity, ItemSelection.class);
        mActivity.startActivity(i);
    }
  }
}
于 2011-02-21T20:11:16.320 に答える
5
Intent i = new Intent(getBaseContext(), ItemSelection.class);

構造は異なりますが、これは私にとってはうまくいきました。ダイアログのクラスはありません。

于 2013-04-11T20:07:43.100 に答える
4

@ dhaag23そんなに多くの仕事をする必要はありません!

getContext()を呼び出す

Contextこれにより、Dialogのコンストラクターに渡されたものが返されます。

于 2011-02-21T20:07:53.567 に答える
2

簡単です。CustomDialogコンストラクターに渡されるコンテキストをローカル変数に保存するだけです。

于 2011-02-21T20:04:19.430 に答える
1

Cheezmeisterが書いたように、Actvitiyを入手する必要はありません。次のようなコンテキストを使用できます。

Intent i = new Intent(getContext(), ItemSelection.class);
getContext().startActivity(i);
于 2014-02-12T11:01:06.220 に答える
1

これを使用することをお勧めします。それはそれをとても簡単にします:

AlertDialog.Builder dialog = new AlertDialog.Builder(RegistrationActivity.this);
dialog.setCancelable(false);
dialog.setTitle("Error Alert");
dialog.setMessage(info[1]);
dialog.setPositiveButton("ok", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int id) {
        Intent intent = new Intent(RegistrationActivity.this, RegistrationActivity.class);

        startActivity(intent);
    }
})
.setNegativeButton("", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

    }
});

final AlertDialog alert = dialog.create();
alert.show();

info[1]表示されている私のデータです。これを独自のメッセージに置き換えることができます。

于 2017-03-30T11:53:22.617 に答える
0

DialogFragmentで作業している場合は、次のように行うことができます。

public class MyDialogFragment : DialogFragment
    {
        private Context _Context;
        ...

         public override void OnActivityCreated(Bundle savedInstanceState)
        {
            _Context = Context;

            ...


            alertDialog.SetButton("Start Activity Button", delegate
            {
                var uri = Android.Net.Uri.Parse("https://.....");
                var intent = new Intent(Intent.ActionView, uri);
                _Context.StartActivity(intent);
于 2018-04-09T08:25:50.897 に答える