Как увеличить значение textview с помощью обработчика? (или другое решение)

прежде всего, я уже пробовал это: Непрерывно увеличивать целочисленное значение как кнопка нажата

Но у меня было 59 ошибок, да, 59, и, поскольку я использовал Eclipse, который ясно сказал вам, какая у вас ошибка, как ее исправить, и внешний вид Android Studio, который был создан для людей с опытом... Я могу' я даже не понимаю, что, черт возьми, делать, чтобы исправить все ошибки (кстати, когда я пытаюсь что-то исправить, я каким-то образом ломаю еще 10).

Итак... Учитывая кнопку и TextView, как мне увеличить текстовое представление (например, в игре Clicker) и заставить его перестать нажимать одну и ту же кнопку снова: и как мне установить интервалы между каждым «щелчком»?

TextView score = (TextView) findViewById(R.id.textView);
score.setText(Integer.toString(i));

    Button click =   (Button) findViewById(R.id.button2);
    click.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            i++;
            score.setText(Integer.toString(i));

        }
    });

Кстати... Мне не нужно решение, мне нужно понять, как именно работают Thread или Handlers, да, все порекомендуют мне документацию, но мне нужно увидеть ПРОСТОЙ пример, объясненный по частям, и я пойму, как это сделать. больше, чем я уже делаю, читая документацию.


person Fabian Montossi    schedule 14.05.2017    source источник
comment
Начните с первой ошибки. Что это? Какая строка кода вызывает это?   -  person Code-Apprentice    schedule 15.05.2017
comment
когда я пытаюсь что-то починить, я как-то ломаю еще 10, это общий опыт для всех программистов, даже для самых опытных из нас   -  person Code-Apprentice    schedule 15.05.2017
comment
Мне нужно понять, как именно работают потоки или обработчики. Потоки используются для дублирования, выполнение которого занимает много времени, например чтение файла или загрузка изображения. Обработчики предназначены для связи между потоками. Вам не нужен ни один из них для выполнения поставленной задачи.   -  person Code-Apprentice    schedule 15.05.2017
comment
Вернитесь к моему первому комментарию и отредактируйте свой вопрос, чтобы показать, какие ошибки вы получаете. Решение ошибок компилятора является частью процесса обучения.   -  person Code-Apprentice    schedule 15.05.2017


Ответы (1)


Учитывая кнопку и TextView, как мне увеличить текстовое представление (например, в игре Clicker) и заставить его перестать нажимать одну и ту же кнопку снова: и как мне установить интервалы между каждым щелчком

Учитывая ваши виджеты score и click из вашего вопроса:

Шаг № 1: Добавьте поле Runnable в свою активность или фрагмент. Здесь я назову его incrementer.

Шаг № 2: Определите поле static final int DELAY в своей активности или фрагменте с желаемым периодом задержки (интервалами) в миллисекундах.

Шаг № 3: пусть ваш Button использует postDelayed() и removeCallbacks() в зависимости от состояния incrementer:

click.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(final View v) {
    if (incrementer==null) {
      incrementer=new Runnable() {
        @Override
        public void run() {
          i++;
          score.setText(Integer.toString(i));
          v.postDelayed(incrementer, DELAY);
        }
      };
      incrementer.run();
    }
    else {
      v.removeCallbacks(incrementer);
      incrementer=null;
    }
  }
}

Поле incrementer выполняет две роли. Он отслеживает, увеличиваем ли мы содержимое TextView или нет, и это фактический код, который делает увеличение.

Если incrementer равно null, в настоящее время мы не увеличиваем TextView. Итак, мы назначаем incrementer Runnable, который может увеличивать TextView. Runnable также вызывает postDelayed(), чтобы сказать "эй, запусти этот Runnable снова через DELAY миллисекунды". Мы сами run() Runnable в первый раз, чтобы заполнить TextView в начале и инициировать вызов postDelayed() для планирования следующего приращения.

Затем цикл будет продолжаться (run() вызов postDelayed(), планирование будущего вызова run()), пока пользователь снова не нажмет кнопку. Затем мы видим, что incrementer не null, поэтому мы должны увеличивать TextView и должны остановиться. removeCallbacks() отменяет расписание последнего вызова postDelayed(), останавливая цикл. Мы устанавливаем incrementer на null в основном для того, чтобы подготовиться к следующему нажатию кнопки.

person CommonsWare    schedule 14.05.2017
comment
Извините за позднюю галочку «Правильный ответ»: D И спасибо за объяснение. - person Fabian Montossi; 05.07.2017