Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I have to click the button twice for it to work

So I have a button in my app and an edittext. When I click the button and write something in the edittext, a textview changes. It all works as it should except for one thing. I have to click on the button twice to make it work (only the first time I open activity). The very first time after I open activity I press the button and nothing happens, after that it works as it should.

I already did my research on this and as far as I know the thing that is causing trouble is focus, but I tried a few things and nothing worked.

Button XML code:

<Button     android:id="@+id/submitButton"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignBaseline="@+id/editText1"     android:layout_alignBottom="@+id/editText1"     android:layout_alignLeft="@+id/checkBox25"     android:text="@string/addMaterial"     android:onClick="submitQuantityButton" > </Button> 

Edittext XML code:

<EditText     android:id="@+id/editText1"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignParentLeft="true"     android:layout_below="@+id/spinner1"     android:ems="3"     android:inputType="number"     android:maxLength="3" > </EditText> 

I tried adding android:focusableInTouchMode="false" to button XML, I also tried adding requestFocus to button XML and it still doesn't work. I also removed the requestFocus from edittext and it doesn't work. I'm running out of ideas what else to try.

onClick method:

public void submitQuantityButton (View v){     Button submitButton = (Button)findViewById(R.id.submitButton);     final Spinner sItems = (Spinner)findViewById(R.id.spinner1);     final Context context = this;     final CheckBox cb4 = (CheckBox) findViewById(R.id.checkBox4);     final CheckBox cb5 = (CheckBox) findViewById(R.id.checkBox5);     final CheckBox cb33 = (CheckBox) findViewById(R.id.checkBox33);     final CheckBox cb30 = (CheckBox) findViewById(R.id.checkBox30);     final CheckBox cb6 = (CheckBox) findViewById(R.id.checkBox6);     final CheckBox cb7 = (CheckBox) findViewById(R.id.checkBox7);     final CheckBox cb9 = (CheckBox) findViewById(R.id.checkBox9);     final CheckBox cb10 = (CheckBox) findViewById(R.id.checkBox10);     final CheckBox cb11 = (CheckBox) findViewById(R.id.checkBox11);     final CheckBox cb12 = (CheckBox) findViewById(R.id.checkBox12);      //     final AlertDialog.Builder emptyETextErrorBuilder = new AlertDialog.Builder(context);     emptyETextErrorBuilder.setTitle("Warning");     emptyETextErrorBuilder.setMessage("Please enter a value before pressing this button");     emptyETextErrorBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {          @Override         public void onClick(DialogInterface dialog, int which) {             dialog.cancel();         }     });      submitButton.setOnClickListener(new View.OnClickListener() {          @Override         public void onClick(View v) {             final int position = sItems.getSelectedItemPosition();             EditText quantityEditText = (EditText)findViewById(R.id.editText1);              switch (position){             case 0:                 AlertDialog.Builder spinnerErrorBuilder = new AlertDialog.Builder(context);                 spinnerErrorBuilder.setTitle("Warning");                 spinnerErrorBuilder.setMessage("Please choose an item from the list above and then enter a certain value");                 spinnerErrorBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {                      @Override                     public void onClick(DialogInterface dialog, int id) {                         dialog.cancel();                     }                 });                 AlertDialog spinnerError = spinnerErrorBuilder.create();                 spinnerError.show();                 break;             case 1:                 String item1 = quantityEditText.getText().toString();                 if (item1.matches(""))                 {                     AlertDialog emptyETextError = emptyETextErrorBuilder.create();                     emptyETextError.show();                 }                 else                 {                     cb4.setText("Elaborate Totem (" + item1 + "/250)");                 }                 break;             case 2:                 String item2 = quantityEditText.getText().toString();                 if (item2.matches(""))                 {                     AlertDialog emptyETextError = emptyETextErrorBuilder.create();                     emptyETextError.show();                 }                 else                 {                     cb5.setText("Pile of Crystalline Dust (" + item2 + "/250)");                 }                 break;             case 3:                 String item3 = quantityEditText.getText().toString();                 if (item3.matches(""))                 {                     AlertDialog emptyETextError = emptyETextErrorBuilder.create();                     emptyETextError.show();                 }                 else                 {                     cb33.setText("Pile of Crystalline Dust (" + item3 + "/250)");                 }                 break;             case 4:                 String item4 = quantityEditText.getText().toString();                 if (item4.matches(""))                 {                     AlertDialog emptyETextError = emptyETextErrorBuilder.create();                     emptyETextError.show();                 }                 else                 {                     cb30.setText("Pile of Crystalline Dust (" + item4 + "/250)");                 }                 break;             case 5:                 String item5 = quantityEditText.getText().toString();                 if (item5.matches(""))                 {                     AlertDialog emptyETextError = emptyETextErrorBuilder.create();                     emptyETextError.show();                 }                 else                 {                     cb6.setText("Powerful Venom Sac (" + item5 + "/250)");                 }                 break;             case 6:                 String item6 = quantityEditText.getText().toString();                 if (item6.matches(""))                 {                     AlertDialog emptyETextError = emptyETextErrorBuilder.create();                     emptyETextError.show();                 }                 else                 {                     cb7.setText("Vial of Powerful Blood (" + item6 + "/250)");                 }                 break;             case 7:                 String item7 = quantityEditText.getText().toString();                 if (item7.matches(""))                 {                     AlertDialog emptyETextError = emptyETextErrorBuilder.create();                     emptyETextError.show();                 }                 else                 {                     cb9.setText("Ancient Bone (" + item7 + "/250)");                 }                 break;             case 8:                 String item8 = quantityEditText.getText().toString();                 if (item8.matches(""))                 {                     AlertDialog emptyETextError = emptyETextErrorBuilder.create();                     emptyETextError.show();                 }                 else                 {                     cb10.setText("Armored Scale (" + item8 + "/250)");                 }                 break;             case 9:                 String item9 = quantityEditText.getText().toString();                 if (item9.matches(""))                 {                     AlertDialog emptyETextError = emptyETextErrorBuilder.create();                     emptyETextError.show();                 }                 else                 {                     cb11.setText("Vicious Claw (" + item9 + "/250)");                 }                 break;             case 10:                 String item10 = quantityEditText.getText().toString();                 if (item10.matches(""))                 {                     AlertDialog emptyETextError = emptyETextErrorBuilder.create();                     emptyETextError.show();                 }                 else                 {                     cb12.setText("Vicious Fang (" + item10 + "/250)");                 }                 break;             }         }     }); } 
like image 416
Guy Avatar asked Jun 23 '13 14:06

Guy


People also ask

Why do buttons click twice?

In most cases, a double-click is with the left mouse button and is used to open or execute a file, folder, or software program. For example, programs and files in Microsoft Windows are opened by double-clicking the icon.

How do I turn off multiple click on Android?

Show activity on this post. call setClickable(false) for all buttons once one of them was clicked. call the next activity with startActivityForResult(...) override onActivityResult(...) and call setClickable(true) for all buttons inside it.


1 Answers

My problem was the Button XML defining:

android:focusableInTouchMode="true" 

Remove this attribute and the button doesn't require being touched twice. It appears as though the first touch is consumed to assign focus on the button and the second then triggers the OnClickListener.

Note that the Button works without issue with the android:focusable="true" attribute.

like image 126
TheIT Avatar answered Sep 26 '22 18:09

TheIT