2016-08-16 6 views
0

Ich habe versucht, Ja Nein Dialog nach dem Klicken auf eine Schaltfläche und senden Sie eine Nachricht, falls Ja gedrückt wurde.Alarmdialog zeigt nur nach einem zweiten Klick

mein Problem ist, dass die Warnung erst nach dem zweiten Klick auf die Schaltfläche angezeigt wird.

die Schaltfläche xml

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/clrTotalButton" 

    android:clickable="false" 
    android:enabled="true" 
    android:onClick="dialogevent" 
    android:layout_alignParentStart="false" 
    android:layout_alignParentEnd="false" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="25dp" 
    android:focusable="true" 
    android:background="@drawable/clrtotal_btn"/

die Schaltfläche Definition:

public static View clrTotalBtn; 

und das Alarmfenster und Befehl:

public void dialogevent(View view){ 

    clrTotalBtn = (Button) findViewById(R.id.clrTotalButton); 
    clrTotalBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AlertDialog.Builder altdial = new AlertDialog.Builder(DeviceControlActivity.this); 
      altdial.setMessage("ARE YOU SURE TO CLEAR TOTAL?").setCancelable(false) 
        .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          writeClrTotal(); 
         } 
        }) 
        .setNegativeButton("No",new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.cancel(); 
         } 
        }); 

      AlertDialog alert = altdial.create(); 
      alert.setTitle("Warning!"); 
      alert.show(); 
     } 
    }); 
} 

Vielen Dank!

+1

Warum haben Sie 'android: clickable =" false "' hinzugefügt? –

+0

das ist eine alte Definition, ich habe es vermisst .. danke –

Antwort

0

Sie müssen den OnClickListener vor dem Klicken auf die Schaltfläche festlegen. Momentan registrieren Sie den Listener beim Klicken auf die Schaltfläche, so dass Sie ihn zweimal anklicken müssen, bevor die Aktion stattfindet. Wenn Sie es im Code tun möchten, müssen Sie z. während onCreate. Wenn Sie mit der XML-Weg gehen möchten, können Sie einfach den Code entfernen Sie den Listener zu registrieren und nur den Inhalt des eigentlichen Zuhörer dort lassen:

public void dialogevent(View view){ 

    AlertDialog.Builder altdial = new AlertDialog.Builder(DeviceControlActivity.this); 
    altdial.setMessage("ARE YOU SURE TO CLEAR TOTAL?").setCancelable(false) 
        .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          writeClrTotal(); 
         } 
        }) 
        .setNegativeButton("No",new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.cancel(); 
         } 
        }); 

      AlertDialog alert = altdial.create(); 
      alert.setTitle("Warning!"); 
      alert.show(); 
} 

edit: und natürlich auch Ihre Button-XML aufzuräumen:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/clrTotalButton" 
    android:onClick="dialogevent" 
    android:layout_alignParentStart="false" 
    android:layout_alignParentEnd="false" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="25dp" 
    android:background="@drawable/clrtotal_btn" /> 
+0

danke für die Erklärung !! –

+0

markieren Sie dies als Antwort, wenn es Ihr Problem gelöst hat;) –

0

Dies liegt daran, dass Sie OnClick zweimal definieren. Sobald Sie in Ihrem XML-Dokument angekommen sind und Sie darauf klicken, definieren Sie einen neuen OnClickListener, auf den geklickt werden muss, um das Overlay anzuzeigen. Verwenden Sie diesen Code:

public void dialogevent(View view){ 
     AlertDialog.Builder altdial = new AlertDialog.Builder(DeviceControlActivity.this); 
     altdial.setMessage("ARE YOU SURE TO CLEAR TOTAL?").setCancelable(false) 
       .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         writeClrTotal(); 
        } 
       }) 
       .setNegativeButton("No",new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 
        } 
       }); 

     AlertDialog alert = altdial.create(); 
     alert.setTitle("Warning!"); 
     alert.show(); 
    } 
1

entfernen diese

clrTotalBtn = (Button) findViewById(R.id.clrTotalButton); 
clrTotalBtn.setOnClickListener(new View.OnClickListener() { 

es so sein sollte:

public void dialogevent(View view){ 
    AlertDialog.Builder altdial = new AlertDialog.Builder(DeviceControlActivity.this); 
     altdial.setMessage("ARE YOU SURE TO CLEAR TOTAL?").setCancelable(false) 
       .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         writeClrTotal(); 
        } 
       }) 
       .setNegativeButton("No",new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 
        } 
       }); 

     AlertDialog alert = altdial.create(); 
     alert.setTitle("Warning!"); 
     alert.show(); 
} 

Da Sie ein onClickListener wieder auf den ersten Klick definieren und zweite Dialog zeigt. Wenn Sie ein click-Ereignis in xml definieren, müssen Sie den click listener nicht mehr setzen.

0

Entfernen Sie den Button onClickListener von dialogevent (View) -Methode.

public void dialogevent(View view){ 

     AlertDialog.Builder altdial = new AlertDialog.Builder(DeviceControlActivity.this); 
     altdial.setMessage("ARE YOU SURE TO CLEAR TOTAL?").setCancelable(false) 
       .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         writeClrTotal(); 
        } 
       }) 
       .setNegativeButton("No",new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 
        } 
       }); 

     AlertDialog alert = altdial.create(); 
     alert.setTitle("Warning!"); 
     alert.show(); 
    } 
});} 
+0

das hat funktioniert danke !!! –

0

Sie können

mithilfe dieser Code getan

XML-Knopf-Code

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/clrTotalButton" 
    android:onClick="dialogevent" 
    android:layout_alignParentStart="false" 
    android:layout_alignParentEnd="false" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="25dp" 
    android:focusable="true" 
    android:background="@drawable/clrtotal_btn"/

Java-Code

public void dialogevent(View view){ 


      AlertDialog.Builder altdial = new AlertDialog.Builder(DeviceControlActivity.this); 
      altdial.setMessage("ARE YOU SURE TO CLEAR TOTAL?").setCancelable(false) 
        .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          writeClrTotal(); 
         } 
        }) 
        .setNegativeButton("No",new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.cancel(); 
         } 
        }); 

      AlertDialog alert = altdial.create(); 
      alert.setTitle("Warning!"); 
      alert.show(); 

} 

In Ihrem Code anwenden alrady onClick Code auf XML .

0

denke ich

android:focusable="true" 

aus XML-Datei entfernt wird Ihr Problem lösen.

Verwandte Themen