Завершить действие после исчезновения всплывающего сообщения?

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

29
задан Tima 30 September 2011 в 07:45
поделиться

4 ответа

Вы делаете это просто путем создания Thread, который длится до тех пор, пока отображается Toast, а затем вы можете закончить свой Activity.

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            // your other stuff
            Toast.makeText(this,"This is a Toast", Toast.LENGTH_LONG).show();
            thread.start();
}

Теперь создайте поток, который ожидает (LENGTH_LONG = 3,5) или (LENGTH_SHORT = 2) секунды

    Thread thread = new Thread(){
             @Override
            public void run() {
                 try {
                    Thread.sleep(Toast.LENGTH_LONG); // As I am using LENGTH_LONG in Toast
                    Your_Activity.this.finish();
                } catch (Exception e) {
                    e.printStackTrace();
                }
             }  
           };
45
ответ дан 28 November 2019 в 00:50
поделиться

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

1
ответ дан 28 November 2019 в 00:50
поделиться

Вот как я это делаю ...

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

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

public class Toaster implements Runnable
{
Context         theContext;
CharSequence    theMessage;
int             theDuration;
Activity        theActivity;

public Toaster( Activity a, Context c, CharSequence s, int i )
{
    theActivity = a;
    theContext = c;
    theMessage = s;
    theDuration = i;
}

@Override
public void run() 
{
    Toast toast = Toast.makeText(theContext, theMessage, theDuration );
    toast.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL, 0, 0);
    toast.show();   

    Thread t = new Thread( new Runnable()
    {
        @Override
        public void run()
        {
            try 
            {
                Thread.sleep(theDuration == Toast.LENGTH_SHORT ? 2500 : 4000);
            }
            catch (InterruptedException e) 
            {
                e.printStackTrace();
            }

            theActivity.finish();
        }

    });
    t.start();
}
}

В упражнении есть фрагмент кода, который выглядит следующим образом:

    Context c = getApplicationContext();
    CharSequence msg = "Form Data Submitted!";
    int duration = Toast.LENGTH_SHORT;

    runOnUiThread( new Toaster(this, c, msg, duration) );
3
ответ дан 28 November 2019 в 00:50
поделиться

Я просто создал простую библиотеку для этой «проблемы». Скачайте:

https://github.com/mkiisoft/Toaster

и пользуйтесь ею таким образом:

Toaster.getInstance().makeText(context, "your custom message", Toast.LENGTH_SHORT, new OnToasterFinish() {
                @Override
                public void finish() {
                    // Your code over here after the Toast
                }
            });
1
ответ дан 28 November 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: