Жұмыс істеу үшін батырманы екі рет басуым керек

Сондықтан менде қосымшаның және редактордың бір батырмасы бар. Түймешікті бассаңыз және edittext-да бірдеңе жазсаңыз, мәтіндік көрініс өзгереді. Мұның бәрі бір нәрсені қоспағанда, жұмыс істейді. Мен жұмыс істеу үшін батырманы екі рет басуым керек (тек қызметті алғаш рет ашқанда). Мен белсенділікті ашқаннан кейін бірінші рет түймені бассам, ештеңе болмайды, кейін ол жұмыс істейді.

Мен бұл туралы менің зерттеуімді жасадым және проблеманы тудыратын нәрсе туралы білемін, бірақ мен бірнеше нәрсені істедім және ештеңе жұмыс істемедім.

Түймешік 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>

Edittext xml коды:



Мен Android-ге қосылуға тырыстым: focus_inTouchMode = «false» xml батырмасына, мен де requestFocus-ті xml түймешігіне қосуды байқап көрдім және ол әлі жұмыс істемейді. Мен сондай-ақ сұранысFocus-ты 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;
            }
        }
    });
}
17
иә, мен бұл тырысты, бірақ мен бұл туралы еске ұмытып
қосылды автор Guy, көзі
Күте тұрыңыз, қай жерде таза көріну керек? Мен оны тек xml файлында редакторға қосуға тырыстық.
қосылды автор Guy, көзі
Мен жасаған постты тексердім
қосылды автор Guy, көзі
onClick дегенді орналастырыңыз ... мүмкін, сіз онда бірдеңе жасайсыз
қосылды автор codeMagic, көзі
Бірнеше нәрсені айтқан кезде, назар аударуға тырысасыз ба?
қосылды автор Evilunclebill, көзі

7 жауаптар

Менің мәселе Button xml анықтады:

android:focusableInTouchMode="true"

Бұл атрибутты алып тастаңыз және түйме екі рет тиіп кетуді қажет етпейді. Бірінші түймені түймені фокусқа тағайындау үшін пайдаланылады, ал екіншісі OnClickListener тудырады.

android: focusable = «true» төлсипатымен жұмыс істемейтінін ескеріңіз.

28
қосылды
focusableInTouchMode дегенді өзгерту мен үшін шешім болды. Рахмет!
қосылды автор Merlevede, көзі
Мен сурет салуды қолданамын, бірақ бұл мен үшін жұмыс істемейді? Не істеуім керек?
қосылды автор ZIA ANSARI, көзі

Жақсы, мен ақырында мәселенің себебін өзім ойлап таптым. Мен осындай ашық мәселені сағынғаныма сене алмаймын. Мәселені туғызған мәселе фокус емес, әдіс. Менің xml файлымда onClick әдісін android арқылы шақырдым: onClick = «onClick» және одан кейін onClick әдісінің ішіндегі java коды үшін түймешік қосқышты қостым.

Барлық мен жасадым, батырманың тізімін алып тастаңыз және қажеті жоқ екі рет басу керек! Сондықтан, кез-келген адам осы мәселені болашақта тек onClick әдісі мен ANDROID түймешігі бар екеніне көз жеткізіңіз.

Қате код:

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
3
қосылды
Бұл қандай да бір себептермен маған жұмыс істемейді. Менде тек екі рет ғана емес, тек бір кодты ғана қосамын. Ол жұмыс істемес бұрын алдымен шоғырландырылған түйменің күйін өзгерте алады, сондықтан мен онклик әдісінің мазмұнын шығарып, оны onClick оқиғасында және onFocus оқиғасында шақырамын. Бірнеше түймелермен onClick секілді onFocus оқиғаларын onFocusChangeListener-пен бірге ұстаңыз, содан кейін түймешік таңдалғанын тексеріңіз.
қосылды автор G_V, көзі

Егер сіз басқа біреуді ашып көрсеңіз, ата-анаңызды орнатыңыз:

view.setFocusable(false);

Мен үшін жұмыс істеді.

2
қосылды

Менің ОП сияқты проблема болды. Мен барлық фокустық ұсыныстарды қолдануға тырыстым, бірақ олардың әрқайсысы маған әрдайым жұмыс істеді.

Мен NavigationDrawer дегенді жоюдан шығарып көрдім, бірақ бұл жұмыс істемеді.

Соңында CoordinatorLayout дегенді LinearLayout дегенмен ауыстырдым және енді менің түймелері әр уақытта бірінші рет басыңыз. Сынап көру мүмкін емес.

0
қосылды

Біраз уақыттан кейін фрагмент бойынша btn немесе txt немесе edt түймесін басқанда қиындық туындады, және шынымен .setOnClickListener() осы мысалға ұқсас .setOnTouchListener қажет:

txtClose.setOnTouchListener((v, event) -> {
               //do staff...
                return false;
            });
0
қосылды

try this once
UPDATED

override onResume method in your activity and then clear focus from your edittext and set focus to your main layout

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

немесе

button.requestFocus();

Егер мәселе виртуалды пернетақтада болса, ол сізге көмектесе алады

Activity тегінің ішіндегі AndroidManifest.xml файлында осы жолды орналастырыңыз

android:windowSoftInputMode="stateHidden"
0
қосылды
Жауабыңызға рахмет, бірақ ол әлі жұмыс істемейді
қосылды автор Guy, көзі
Менің 2-ші салыстырмалы жоспарыма қосылды (менің ойымша, бұл сіз ойлағандай) және қайғылы түрде әлі жұмыс істемейді
қосылды автор Guy, көзі
Edittext.clearfocus() жасадым, бірақ ол жұмыс істемейді. Бірақ layout.requestFocus() (eclipse қызыл түспен асты сызылған)
қосылды автор Guy, көзі
Ия, мен оны xml (requestFocus) бағдарламасында қолдануға тырыстым, ол жұмыс істемеді. Осы уақытқа дейін назар аударуға тырысқаннан кейін, мен ойлауды бастадым ...
қосылды автор Guy, көзі
button және edittext бар макетіңізде
қосылды автор Michael Shrestha, көзі
@Matthew жаңартылған жауапты тексеріңіз
қосылды автор Michael Shrestha, көзі
ол сіздің түймеңізге назар аударуға тырысты ма?
қосылды автор Michael Shrestha, көзі

Тек EditText мәтінін алу үшін getText() пайдаланыңыз Содан кейін SetText() көмегімен TextView мәтінін орнатыңыз.

0
қосылды