Что я делаю не так в моем простом приложении для Android? - PullRequest
0 голосов
/ 11 февраля 2019

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

У меня нет большого опыта в программировании, и я не знаю, что я делаю неправильно.и я только попробовал этот код.

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final TextView text = (TextView)findViewById(R.id.textView);
    final Button button = (Button)findViewById(R.id.button);
    Switch mySwitch = (Switch)findViewById(R.id.mySwitch);

    mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked== true){

                    button.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            String text_string = text.getText().toString();
                            int text_int = Integer.parseInt(text_string);
                            text_int++;
                            text.setText(text_int);

                        }
                    });


                }

                if (isChecked == false) {

                    button.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                            String text_string = text.getText().toString();
                            int text_int = Integer.parseInt(text_string);
                            text_int++;
                            text.setText(text_int);

                        }
                    });

                }
        }
    });
}

}

, поэтому он должен вести себя так, как я описал ранее, но это не так.

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

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

    button.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
       if(mySwitch.isChecked(){
           String text_string = text.getText().toString();
           int text_int = Integer.parseInt(text_string);
           text_int++;
           text.setText(String.valueOf(text_int));
        } else {
           String text_string = text.getText().toString();
           int text_int = Integer.parseInt(text_string);
           text_int++;
           text.setText(String.valueOf(text_int));
        }
      }
   });
0 голосов
/ 11 февраля 2019

Ваше приложение дает сбой, потому что вы пытаетесь установить для int значение textview.setText(), и когда вы передаете int этому методу, оно ожидает, что это будет идентификатор ресурса, который не может быть найден в вашем случае, поэтому оно будет выбрасыватьResourceNotFoundException и вылетает.

Вы должны установить текст следующим образом:

text.setText(String.valueOf(text_int));
0 голосов
/ 11 февраля 2019

Вам не нужен слушатель для Switch, а только 1 слушатель для Button:

final TextView text = (TextView)findViewById(R.id.textView);
final Button button = (Button)findViewById(R.id.button);
final Switch mySwitch = (Switch)findViewById(R.id.mySwitch);

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String text_string = text.getText().toString();
        int text_int = 0;
        try {
            text_int = Integer.parseInt(text_string);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        if (mySwitch.isChecked())
            text_int++;
        else
            text_int--;
        text.setText("" + text_int);
    }
});

Каждый раз, когда вы нажимаете Button, в его слушателе значение вTextView увеличивается или уменьшается в зависимости от того, установлен переключатель или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...