#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();
});
Помогает ли это?