1

これは単純な質問だと思います(私はそのような初心者です…)3つのボタンがあるこのカスタムダイアログボックスがあります。

ボタンの1つからアクティビティを呼び出したいので、これを試しました。

public class picturedialog extends Dialog implements OnClickListener {
    Button Camera;

    public picturedialog (Context context){
        super (context);
        setContentView(R.layout.picturedialog);

        Camera = (Button) this.findViewById(R.id.pdButton1);

        Camera.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                dismiss();

                Intent myIntent = new Intent(view.getContext(), CameraActivity.class);
                startActivity(myIntent);

            }
        });
...
}

次に、startActivity(myIntent)に赤い波線が表示されます。その上にカーソルを合わせると、eclipseは次のように通知します。「メソッドstartActivity(Intent)は、タイプnew View.OnClickListener(){}に対して未定義です。」え?これを正しく行う方法を教えてください。どんな助けでもいただければ幸いです。

4

2 に答える 2

2

アクティビティの名前が A だとすると、次のようになります。

   A.this.startActivity(myIntent);

内部クラス内の「これ」がその内部クラスのオブジェクトを参照するために、問題が発生します。これは、囲んでいるアクティビティのオブジェクトが必要な場合です。A.this は that を参照します。

このクラスをアクティビティで囲んでいない場合は、メソッドに渡したコンテキスト (context.startActivty(myIntent) など) を使用してメソッドから startActivity を呼び出してみてください。startActivity メソッドは Context クラスに属します。

于 2011-01-24T20:00:33.290 に答える
1

からのサブクラス化を複雑にしすぎていると思いますDialog。ダイアログのチュートリアルに従ってみてください - https://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog

Activity.onCreateDialog()ダイアログは、独自のカスタム ダイアログ クラスを用意する必要なく、その場で ( で) 作成されることに注意してください。ラッピング アクティビティの内部にリスナーを設定すると (チュートリアルに従っている場合)、 を呼び出すことができますstartActivity(myIntent)。これは、ラッピング クラス インスタンスのすべてのフィールド/メソッドが内部クラスのインスタンスで使用できるためです。

于 2011-01-24T20:17:06.003 に答える