realizan - propiedades jbutton java
Tengo que hacer clic en el botón dos veces para que funcione. (7)
Así que tengo un botón en mi aplicación y un edittext. Cuando hago clic en el botón y escribo algo en el texto de edición, cambia una vista de texto. Todo funciona como debería, excepto por una cosa. Tengo que hacer clic en el botón dos veces para que funcione (solo la primera vez que abro la actividad). La primera vez que abro la actividad, presiono el botón y no pasa nada, después de eso funciona como debería.
Ya hice mi investigación sobre esto y hasta donde sé, lo que está causando problemas es el enfoque, pero probé algunas cosas y nada funcionó.
Código XML del botón:
<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>
Código XML de texto de edición:
<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>
Intenté agregar android: focusableInTouchMode = "false" al botón XML, también intenté agregar requestFocus al botón XML y todavía no funciona. También quité el requestFocus de edittext y no funciona. Me estoy quedando sin ideas qué más probar.
Método onClick:
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;
}
}
});
}
Bueno, por fin he descubierto la causa del problema, por mi cuenta. No puedo creer que me haya perdido un problema tan obvio. Lo que causó el problema no fue el enfoque, sino el método en sí. En mi archivo XML llamé al método onClick de android: onClick = "onClick" y luego también agregué un activador de botones dentro del método onClick al código java.
¡Todo lo que hice fue eliminar el activador de botones y ya no es necesario hacer doble clic! Entonces, si alguien tiene este problema en el futuro, simplemente asegúrese de no tener un método onClick Y un botón de escucha al mismo tiempo.
Codigo erroneo:
public void submitQuantityButton (View v){
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
.
.
. //REST OF THE CODE
Para hacer que funcione, simplemente eliminé el oyente onclick, dejando solo:
public void submitQuantityButton (View v){
.
.
. //REST OF THE CODE
En algún momento tuve problemas al hacer clic en btn o txt o edt en el fragmento, y realmente ayuda a usar .setOnClickListener () necesita .setOnTouchListener como este ejemplo:
txtClose.setOnTouchListener((v, event) -> {
// do staff...
return false;
});
Mi problema fue el Button
XML que define:
android:focusableInTouchMode="true"
Elimine este atributo y el botón no requiere que se toque dos veces. Parece como si se OnClickListener
consumido el primer toque para asignar el foco en el botón y luego el segundo OnClickListener
el OnClickListener
.
Tenga en cuenta que el botón funciona sin problemas con el atributo android:focusable="true"
.
Si está inflando la vista a otra, intente configurarlo en la vista principal:
view.setFocusable(false);
trabajó para mi.
Simplemente use getText () para obtener texto de EditText y luego configure el texto de TextView usando setText ().
Tuve el mismo problema que el OP. Intenté todas las sugerencias relacionadas con el enfoque, pero ninguna de ellas me funcionó cada vez.
Intenté quitar NavigationDrawer
de mi diseño, pero no funcionó.
Por último, intenté reemplazar mi CoordinatorLayout
con un LinearLayout
y ahora mis botones hacen clic por primera vez cada vez. Podría valer la pena probar.
prueba esto una vez
ACTUALIZADO
override
método onResume
en su activity
y luego elimine el enfoque de su texto de edición y establezca el enfoque en su diseño principal
edittext.clearFocus();
layout.requestFocus();
o
button.requestFocus();
Si el problema es con el teclado virtual, podría ayudarte.
en su archivo AndroidManifest.xml
dentro de su etiqueta de Activity
ponga esta línea
android:windowSoftInputMode="stateHidden"