Кто-нибудь знает, есть ли возможность что-то сделать (в моем случае - завершить действие), когда всплывающее сообщение будет закрыто?
Вы делаете это просто путем создания 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();
}
}
};
Я не уверен, что вы можете сделать это с помощью тостов, однако вы можете заменить тост простым диалогом (и повторно использовать дизайн тостов, если хотите), а затем вы можете использовать такие методы, как onDetachedFromWindow
, чтобы привязать закрытие действия к окну.
Вот как я это делаю ...
Обратите внимание, что этот класс включает в себя вызов для закрытия действия, которое его вызвало. Вы можете взять это при необходимости.
Кроме того, обратите внимание, что время сна отслеживает продолжительность тоста, но я добавил дополнительные полсекунды, чтобы дать небольшой запас до окончания действия.
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) );
Я просто создал простую библиотеку для этой «проблемы». Скачайте:
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
}
});