Android установил уведомление о загрузке для кнопки с задержкой / замедлением

#android #button #loading

#Android #кнопка #Загрузка

Вопрос:

У меня есть кнопка, которая открывает другое действие. Однако это действие требует больших ресурсов и занимает примерно секунду для загрузки. (У меня много материала в onCreate)

В то же время, нет отзывов пользователей о том, что кнопка была нажата успешно (что может привести к спаму, нажимающему и открывающему действие несколько раз)

Я заметил, что анимация нажатия кнопки выполняется только после правильной загрузки действия, которое я хочу загрузить (что, как я уже упоминал, занимает некоторое время)

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

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

         public void onClick(View v) {
            //Initial attempt to create a notification upon button press (doesn't work)
            Toast toast = Toast.makeText(getApplicationContext(),"It's going, give it a moment",Toast.LENGTH_SHORT);
            toast.show();  
        
            //Attach a 500kb string to my intent (takes around a second)
            intentViewPrices.putExtra("priceData",txtJson.getText().toString());
            //Starts an activity that has to process all that data (also takes a second)
            startActivity(intentViewPrices);
        }
  

Если у кого-нибудь есть какой-либо совет, это было бы здорово!

ОБНОВЛЕНИЕ: После дальнейшего тестирования я обнаружил, что в моем собственном случае предыдущая ресурсоемкая задача была не совсем завершена, и в ту буквально секунду, когда я нажимал эту кнопку, она «ставила» ее в очередь, но на самом деле не работает, создавая впечатление, что это ошибка кнопки, но в моем случае это было не так.

(Хотя это не очень важно, мой фактический код работает нормально, хотя и с небольшой задержкой)

Комментарии:

1. Небольшая часть кода была бы отличной, чтобы у людей было представление о том, что делать 🙂

Ответ №1:

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

 button.setOnClickListener(view -> {
        //don't allow any more clicks
        button.setEnabled( false);

        new Thread(){
            @Override
            public void run() {
                //resource intensive code
            }

        }.start();
    });
  

Помогает ли это?