onClickListener завершает работу приложения при нажатии кнопки в Android Studio - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь сделать заявку, в которой слово «Извините»! будет печатать столько же времени, сколько вводится пользовательской кнопкой, как только кнопка нажата, происходит сбой. Даже если я попытаюсь установить Toast в onclicklistener, приложение не обработает sh, но оно не будет сформировано. Я думаю, что есть проблема в файле Java. Вот файл java:

    package com.example.satvara.vipul.instantmessage;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Sorry extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sorry);
        this.setTitle(R.string.activity_sorry);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        EditText editText= findViewById(R.id.editText);
        String str = editText.getText().toString();
        final int i= Integer.parseInt(str);
        final TextView textView=findViewById(R.id.textView);
        Button btn=findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int j=0; j>i;j++){
                    textView.setText("Sorry!");
                }
            }
        });

    }

}

Вот файл XML:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Sorry">
    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TableRow>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Number:"
                android:padding="10dp"
                android:textSize="20dp"
                android:textColor="@color/text"
                android:layout_column="1"/>
            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="Enter Here"
                android:paddingLeft="7dp"
                android:paddingRight="7dp"
                android:backgroundTint="@color/colorPrimaryDark"
                android:textCursorDrawable="@drawable/cursor_color"
                android:inputType="number"
                android:id="@+id/editText"/>
        </TableRow>
        <TableRow>
            <Button
                android:layout_column="2"
                android:hint="Send via Whatsapp"
                android:id="@+id/btn"
                ></Button>
        </TableRow>
        <TableRow>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/textView">
            </TextView>
        </TableRow>
    </TableLayout>

</android.support.constraint.ConstraintLayout>

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Вы должны поставить get edit text в onClick (). Вы для L oop состояние не так. Даже если это было правильно, вы просто устанавливали один и тот же текст для i раз. Вы должны использовать l oop только для установки значения yourString и позже, когда l oop превышает setText (yourString)

public class Sorry extends AppCompatActivity {
    EditText edittext;
    TextView textView;
    Button btn;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_sorry);
            this.setTitle(R.string.activity_sorry);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);

            editText= findViewById(R.id.editText);
            textView=findViewById(R.id.textView);
            btn=findViewById(R.id.btn);

            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                 String str = editText.getText().toString();
                 int i= Integer.parseInt(str);
                  String myText="";
                    for (int j=0; j<i;j++){
                        myText=myText.concat("Sorry \n");
                    }
                   textView.setText(myText);
                }
            });

        }

    };
0 голосов
/ 10 апреля 2020

Проблема в следующих строках:

String str = editText.getText().toString();
final int i= Integer.parseInt(str);

Ваш EditText еще не создан в пользовательском интерфейсе в методе onCreate действия.

Вам необходимо прочитать значение через некоторое событие пользовательского интерфейса, после того, как весь пользовательский интерфейс сформирован.

Например, вы можете прочитать EditText при нажатии кнопки.

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String str = editText.getText().toString();
            int i= Integer.parseInt(str);

            for (int j=0; j>i;j++){
                textView.setText("Sorry!");
            }
        }
    });

В приведенном выше коде текст внутри TextView будет перезаписываться после каждого l oop. Таким образом, для любого значения i> = 1 вы увидите только один «Извините!» внутри TextView.

...