0

呼び出されたときにいくつかの値をリセットする onLongClickListener があります。ユーザーが本当にすべての値をリセットしたいかどうかを確認するために、alertDialog を広告したいと思います。しかし、私はそれを機能させることに喜びを感じていません。

リセット セクションはそれ自体で正常に動作しますが、AlertDialog を追加しようとすると、次のエラーが発生します。

この行に複数のマーカー - コンストラクター AlertDialog.Builder(new View.OnLongClickListener(){}) は定義されていません - 行ブレークポイント:SatFinder [行: 174] - onLongClick(View)

これは正確には何を意味し、どうすれば修正できますか? どうもありがとう。

以下はコードのセクションです。この例では、アラートは役に立たないことに注意してください。上記のエラーを乗り越えたら、それを変更します。

    resetAll = new OnLongClickListener() {

   @Override
   public boolean onLongClick(View v) {

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

       // set the message to display
       alertbox.setMessage("This is the alertbox!");

       // set a positive/yes button and create a listener
       alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

           // do something when the button is clicked
           public void onClick(DialogInterface arg0, int arg1) {
               Toast.makeText(getApplicationContext(), "'Yes' button clicked", Toast.LENGTH_SHORT).show();
           }
       });

       // set a negative/no button and create a listener
       alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {

           // do something when the button is clicked
           public void onClick(DialogInterface arg0, int arg1) {
               Toast.makeText(getApplicationContext(), "'No' button clicked", Toast.LENGTH_SHORT).show();
           }
       });

       alertbox.show();

    // Resets all values and radio buttons
    pos1_deg.setText("0.0");
    pos2_deg.setText("0.0");
    pos1_az.setText("0.0");
    pos2_az.setText("0.0");
    targetDeg.setText("0.0");
    blurg.setText("----");

    radio1.setChecked(false);
    radio2.setChecked(false);
    radio3.setChecked(false);
    radio1E.setChecked(true);
    radio2E.setChecked(true);
    radio3E.setChecked(true);

    Toast.makeText(getApplicationContext(), 
      "Reset", Toast.LENGTH_LONG).show();

    return true;
   }

};
4

2 に答える 2

12

問題は、次のコード行です。

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

実際には、インターフェイスを実装する匿名の内部クラスの内部にありますOnLongClickListenerAlertDialog.Builder()コンストラクターの引数は、 Contextオブジェクト である必要があります。thisここでの引数として、Contextを拡張しない匿名の内部クラスオブジェクトを参照します。投稿されたコードフラグメントはActivityオブジェクト内にあると思います。その場合は、行を次のように変更します。

AlertDialog.Builder alertbox = new AlertDialog.Builder(OuterClass.this);

ここで、OuterClassは、このメソッドが含まれるActivityクラスの名前です。これは、内部クラスが定義されているオブジェクトを参照するために使用される構文です。

于 2010-11-14T00:44:57.063 に答える
0
AlertDialog.Builder alertbox = new AlertDialog.Builder(v.getContext());
于 2014-07-25T12:55:44.207 に答える