题
我开发了一个Android应用程序,我面临着一个问题 Toast
。假设我正在显示吐司,它显示在应用程序窗口上。出现对话框时,吐司不会立即消失。
我想知道如何取消吐司。
解决方案
Toast.makeText
返回a Toast
目的。称呼 cancel()
在此对象上取消它。
其他提示
您可以为吐司指定的最短持续时间是 Toast.LENGTH_SHORT
有价值 0
但实际上是 2000 milliseconds long
. 。如果您想要的比这要短,请尝试以下操作:
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
我认为无需创建自定义吐司。
仅创建单个实例 Toast
班级。我们只是使用敬酒的文本 toast.setText("string")
, ,并打电话 toast.cancel()
方法IN onDestroy()
方法。
工作代码片段如下:
package co.toast;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class ShowToastActivity extends Activity {
private Toast toast = null;
Button btnShowToast;
@SuppressLint("ShowToast")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// creates only one toast object..
toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG);
btnShowToast = (Button) findViewById(R.id.btnShowToast);
btnShowToast.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// only set text to toast object..
toast.setText("My toast!");
toast.show();
}
});
}
@Override
protected void onDestroy()
{
toast.cancel();
super.onDestroy();
}
@Override
protected void onStop () {
super.onStop();
toast.cancel();
}
}
希望这对您有帮助。
使用tost的取消方法:toast.cancel();
这是一个使用的基本示例 cancel()
方法 Toast
.
Toast mytoast;
mytoast = Toast.makeText(getApplicationContext(), "Hi Ho Jorgesys! ", Toast.LENGTH_LONG);
mytoast.show();
....
....
....
if(CancelToast){
mytoast.cancel();
}
Toast toast;
private void showToast(String text) {
if (toast!=null)
toast.cancel();
toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
toast.show();
}
好的,我也试图取消吐司,似乎无法接听CANCEL()调用以在activity.ondestroy()或activity.onstop()等中调用。谷歌搜索需要帮助取消吐司的其他人,我认为我仍然不清楚何时停止,暂停,摧毁活动。我需要一种肯定的方式来迫使我的活动暂停或停止。
在我的具体情况下,由于只有短持续时间吐司,因此我决定迭代一个循环5次进行长期吐司的表演,因此它将在屏幕上停留15-20秒。效果很好!
但是,使用吐司对象的缺点(负面副作用)是,即使用户放弃了您的应用程序并返回到Home-Screen并开始使用其他应用程序... 15-20秒,除非您可以保证可以找到某个位置(某种方式)以调用CANCAL()。另外,您必须相信Android会兑现您的CANCEL()电话!
因此,为此,我一直在调整我的简单循环,试图在循环中取消取消,并向自己证明它将尊重取消电话,并在视觉上表现出预期的行为。
代码段:注意:'Toast'是一个公共实例变量,因此我们只有一个敬酒的实例[如上所述,评论者确认两年前在Activity Onstop()和Ondestroy中工作( )
toast = Toast.makeText(ctxt, result, Toast.LENGTH_LONG);
for (int i=0; i < 5; i++)
{
// Long-toasts each last about 3.5 secs
toast.show();
android.os.SystemClock.sleep(1500);
toast.cancel();
android.os.SystemClock.sleep(1500);
toast = Toast.makeText(ctxt, result, Toast.LENGTH_LONG);
}
好的,原始循环仅包含一行进行演出。那本身就起作用。
但是在实验中,我添加了接下来的四行,通过3.5秒的显示,然后取消它,再次入睡一秒钟半,然后重新创建并再次显示吐司。
我希望看到烤面包约1.5秒,然后看到它消失了,然后在另外1.5秒内恢复了烤面包,等等。
猜猜什么...烤面包根本不会出现!
好的,我完全是喃喃自语模式...在理解如何实现吐司级和应该表现的内部疾病时,我缺少什么?
而且,回到我的第一个问题:如何最好地让我的活动进入暂停或停止状态?
注意:我读了很多...太好了!!!这是我第一次发布到线程讨论中的中间...对不起,我的答复被标记为答案,而不是作为与此线程主题有关的问题。这是给予的