Я должен нажать на кнопку два раза для того, чтобы работать

Так у меня есть кнопка в моем приложении и полей EditText. Когда я нажимаю на кнопку и написать что-нибудь в поля EditText, изменяет поле TextView. Все работает как надо кроме одного. Я должен нажать на кнопку два раза, чтобы заставить его работать (только первый раз, когда я открываю деятельности). Первый раз после того, как я открываю активности я нажимаю на кнопку и ничего не происходит, после этого он работает как надо.

Я уже провел свое исследование на этого и, насколько я знаю, то, что вызывает болезнь внимания, но я пробовал несколько вещей, и ничего не получалось.

XML-код кнопки:

<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>

XML-код полей EditText:

<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>

Я пробовал добавлять андроид:focusableInTouchMode=то"ложные" на кнопку в XML, я также пробовал добавлять requestFocus кнопку XML и он до сих пор не't работа. Я также удалены requestFocus из EditText и он не'т работу. Я'м закончились идеи, что еще попробовать.

метод 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;
            }
        }
    });
}
Комментарии к вопросу (7)

Моя проблема была кнопки XML, определяющий:

android:focusableInTouchMode="true"

Удалить этот атрибут и кнопку Не'т нужно дважды коснулся. Кажется, как будто первое прикосновение потребляется назначить фокус на кнопку, а второй потом запускает OnClickListener`.

Обратите внимание, что кнопка работает без проблем с андроид:фокусируемый=то"Правда" в атрибут.

Комментарии (2)
Решение

Итак, я наконец выяснил, чем вызвана проблема, сама. Я могу'т поверить, что я пропустил такой очевидный вопрос. То, что вызвало проблему было'т фокуса, но сам метод. В мой XML-файл я назвал метод onclick на Android:функция onclick=то"кнопке" и тогда я также добавил buttonlistener внутри метод onclick в Java-код.

Все, что я делал, было удалить buttonlistener и там's нет больше необходимости двойным нажатием! Так что если у кого есть эта проблема в будущем просто убедитесь, что вы Дон'Т есть метод onclick и buttonlistener в то же время.

Неправильный код:

public void submitQuantityButton (View v){

submitButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
.
.
. //REST OF THE CODE

Чтобы заставить его работать я просто удалена функция onclick слушателя, оставив только:

public void submitQuantityButton (View v){
.
.
. //REST OF THE CODE
Комментарии (1)

Если вы не надувать посмотреть на другую, попробуйте установить на родительский вид:

view.setFocusable(false);

работал для меня.

Комментарии (0)

Когда-то у меня это проблема, когда клик на БТН или . txt В или моск на фрагменте, и действительно помогает, а не использовать .setOnClickListener() нужно .setOnTouchListener как в этом примере:

txtClose.setOnTouchListener((v, event) -> {
                // do staff...
                return false;
            });
Комментарии (0)

Просто используйте то gettext (), чтобы получить текст из полей EditText И тогда набор текста в поле TextView использовании setText().

Комментарии (0)

попробуйте еще этот Обновлено

переопределить `onResume метод в вашей "активности" а затем снимите фокус с вашего EditText и установить фокус на ваш основной макет

edittext.clearFocus();
layout.requestFocus();

или

button.requestFocus();

если проблема с виртуальной клавиатуры может помочь вам

в ваш файл AndroidManifest.xml внутри тег активность вставляем эту строку

android:windowSoftInputMode="stateHidden"
Комментарии (7)

У меня была такая же проблема, как ОП. Я попробовал все связанные с фокусом предложения, но никто из них не работал, каждый раз для меня.

Я пробовал извлекать NavigationDrawer от моего макета, но это'т работу.

Наконец, я пытался заменить мой CoordinatorLayout с макет и теперь мои кнопки нажать первый раз каждый раз. Может быть стоит попробовать.

Комментарии (0)