2013-09-17 2 views
1

В моем приложении у меня есть процедура, которая может длиться от 2 до 15 секунд больше или меньше. То, что я хочу, чтобы установить вид тоста, что, когда начинается процедура показывает:Запуск и отмена тоста программно

Loading values. Wait... 

Только теперь я выставиться продолжительность тостов на короткий, потому что, если процедура длится около 5 или менее секунд, ДЛИННАЯ будет именно так, очень долго. Но, назначив длительность SHORT, когда она длится более 10 секунд, тост исчезает, и нет сообщения, показывающего, что приложение все еще обрабатывается, чтобы пользователь мог прикоснуться к вещам.

Я хочу, чтобы установить что-то вроде тоста, но я могу программным образом отменить, когда процедура закончена. Есть идеи?

+2

Использовать полную ссылку для u http://learnandroideasily.blogspot.in/2013/05/customizing-display-time-of-toast.html –

+0

[Связанный код здесь показывает, как отменить просмотр Тоста] (http: /stackoverflow.com/questions/16098151/android-cancel-toast-when-exiting-the-app-and-when-toast-is-being-shown). К сожалению, он не показывает, как сохранить его в течение неопределенного промежутка времени. –

ответ

4

Я рекомендовал бы, чтобы вы просто установить длительность Toast для the maximum possible time, а затем использовать объект Toast вернулся из Toast.makeText (...) отменить его, когда ваш процесс завершен.

Toast t = Toast.makeText(....., YERY_LONG_TOAST_TIME); 
t.show(); 

public void onYourTaskFinished() { 
    t.cancel(); 
} 

Что-то в этом роде. лично я бы рекомендовал использовать ProgressDialog КСТАТИ: http://developer.android.com/reference/android/app/ProgressDialog.html

+0

Могу ли я использовать processDialog, как вы использовали тост, чтобы начать и отменить его программно? Я утверждал, что ProcessDialog просто использовался, чтобы показать какой-то бар с ходом процесса. – masmic

+0

Да, его можно отменить программно и использовать, особенно когда дело доходит до сетевых операций или при интенсивных вычислениях, требующих времени. Вот пример: http://androiddesk.wordpress.com/tag/progress-dialog-with-an-example/ –

+0

'установить продолжительность Toast как 30 секунд [вообще невозможно] (http: // grepcode .com/файл/repository.grepcode.com/Java/внутр/com.google.android/Android/4.3_r2.1/ком/Android/сервер/NotificationManagerService.java # NotificationManagerService.scheduleTimeoutLocked% 28com.android.server.NotificationManagerService.ToastRecord% 2Cboolean% 29) 'YERY_LONG_TOAST_TIME' не имеет значения ... он всегда будет длинным = 3,5 секунды. и короткие 2 сек. – Selvin

1

Вот пример:

final Toast toast = Toast.makeText(ctx, "This message will disappear in 1 second", Toast.LENGTH_SHORT); 
toast.show(); 

Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      toast.cancel(); 
     } 
}, 1000); //specify delay here that is shorter than Toast.LENGTH_SHORT 
+0

Спасибо @silvia_aut, но я не пытаюсь установить тост короче или дольше, чем по умолчанию. Я просто пытаюсь понять, как показать какое-то сообщение, которое я могу запустить и отменить программно – masmic

+0

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

0
final Toast toast = Toast.makeText(ctx, "hello android", Toast.LENGTH_SHORT); 

Handler h= new Handler(); 
    h.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      toast.show(); 
     } 
}, 1000); 



    h.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      toast.cancel(); 
     } 
}, 3000); 
0

Вы можете иметь обработчик тоста при ее создании, передать его вам работу и вызвать метод шоу(), когда начинается работа и вызовите метод cancel(), когда закончите работу.

Однако, из вашего описания, сообщение тоста не может быть вашим лучшим выбором. Тост больше похож на подсказку, которая мало влияет, если пользователь ее пропустит. Если у вас мало информации о вашем приложении, я думаю, вам может понадобиться ProgressDialog, если вы не хотите, чтобы пользователь прикасался к чему-либо во время загрузки данных или ProgressBar, если вы просто хотите, чтобы пользователь знал прогресс вашей работы.

-1

Не используйте Toast для этой цели. Вы должны использовать диалог прогресса или добавить индикатор прогресса в панель уведомлений. Таким образом, пользователь сможет увидеть прогресс, даже не находящийся внутри вашего приложения.

+0

Наконец, я использовал progressDialog. Благодаря! – masmic