我正在尝试编写一个应用程序,它会在经过一段时间后返回到前台时执行某些特定操作.有没有办法检测应用程序何时发送到后台或带到前台?
在我的应用程序中,我为我的活动构建了一个日历小部件,当我将其滚动到上个月或下个月时,我让它进行祝酒并显示它.
问题是,吐司需要时间显示,当我滚动得足够快时,例如,我滚动到"2012/05"和"2012/06"并滚动到"2012/07"而没有停顿,我必须等待"2012/05","2012/06","2012/07"的吐司慢慢地逐一展示.
似乎Android有一个不可见的队列来管理祝酒词
我怎样才能清理它并且只显示最后的吐司?我可以立即显示特定的Toast而无需等待吗?
我搜索了"android.widget.Toast.java"并找到了一个方法cancel(),但不幸的是它不能如下工作.
if (t != null) {
t.cancel();
}
t = Toast.makeText(this.mContext, mHelper.getYear() + "?"
+ (mHelper.getMonth() + 1) + "?", Toast.LENGTH_SHORT);
t.show();
Run Code Online (Sandbox Code Playgroud) 我在这里已经阅读过这类问题,但答案似乎没有奏效.
我Toast在用户点击按钮时显示.当用户不断点击按钮时,即使用户退出活动,烤面包仍会一次又一次地显示.
吐司的长度很短.由于文本很长,因此无法更改Toast的长度.
这就是我现在所尝试的:
Toast toast;
toast=Toast.makeText(getApplicationContext(),"text",Toast.LENGTH_SHORT);
if(toast.getView().isShown()==false){
toast.show();
}
Run Code Online (Sandbox Code Playgroud)
这没用.
我试过了 :
if(toast.getView().isShown()==true){
toast.cancel();
}
Run Code Online (Sandbox Code Playgroud)
在onStop().由于某种原因,取消方法永远不会有效.
如果我把.cancel()之前我显示应用程序...那么将有另一个空检查.但这样做之后也无效.我可以显示一个对话框而不是一个吐司,但这不是一个解决方案.
有没有办法检查是否正在显示吐司?
以供参考
我在我的应用程序中使用Toast.当我按下按钮时,它显示一个Toast.我的问题是,第二次按下按钮时,第二次吐司正在"等待"第一次结束并且仅显示...我希望当前的一个立即显示而不是等待.这是我的简单代码:
toast = Toast.makeText(getApplicationContext(), "Press Back to retorn to the main page", Toast.LENGTH_SHORT);
toast.show();
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个运行4.4.2的股票Nexus 5(如果重要的话使用ART),我发现了一个有趣的场景.我有这个作为我的onDestroy():
@Override
protected void onDestroy() {
super.onDestroy();
t.setText("onDestroy");
t.show();
}
Run Code Online (Sandbox Code Playgroud)
这是一个面向GPS的应用程序,所以我起来走动.我正在使用此问题中提到的技术来显示许多调试Toast消息.
无论如何,当我旋转我的应用程序时,会出现吐司.我知道活动被破坏并为新方向重新创建,但我怎么知道实际发生了什么?如何判断我的应用程序何时被破坏而不仅仅是被轮换?与此问题类似,我想在特定活动被销毁时注销.
有没有办法可以通过编程方式停止Toast消息?
假设我有一个按钮,我单击滚动查看Toast消息,在onclick事件中我想停止所有队列并显示新的,我该怎么做?
我的代码的简化版本如下 - 代码:
public class Help extends Activity{
LinearLayout background;
int screenNo = 1;
Toast toast;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.help);
background = (LinearLayout) findViewById(R.id.helpLayout);
ImageButton next = (ImageButton) findViewById(R.id.imageButtonNext);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
toast.cancel();
showNextScreen();
}});
}
private void showMessageBox(String title, String msg) {
AlertDialog.Builder b = new AlertDialog.Builder(this);
b.setTitle(title);
b.setMessage(msg);
b.setPositiveButton("Next", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int …Run Code Online (Sandbox Code Playgroud) 下面的代码显示了我目前的实现,这里正在创建一个 toast 对象并在 onPause() 中关闭。这工作正常,直到没有敬酒队列。
public static long **savedTimeStamp=0**;
Toast showToastMessage;
if(System.currentTimeMillis()/1000 - savedTimeStamp >= 60 || savedTimeStamp==0){
showToastMessage=Toast.makeText(this.this, "Toast message", Toast.LENGTH_LONG);
showToastMessage.show();
savedTimeStamp=System.currentTimeMillis()/1000;
}
@Override
protected void onPause() {
super.onPause();
if(showToastMessage!=null)
{
showToastMessage.cancel();
}
}
Run Code Online (Sandbox Code Playgroud) 我在android中以对话框的形式显示了一个值数组,点击任何项目,显示特定的吐司.现在,如果我在下一刻点击此列表(阵列)上的其他项目,则在短时间(大约5秒)之后显示该特定的吐司,直到显示旧的吐司.如果我想在选择/点击列表中的其他项目后立即显示新的Toast,我该怎么办?
那么有人可以告诉我实现这一目标的逻辑是什么?
例如,考虑这个代码 -
String NumberOfItems[] = { "1", "2", "3" };
Activity mActivity;
int id =0;
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle(R.string.dialog_heading);
builder.setSingleChoiceItems(NumberOfItems, id, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
switch(id)
{
case 0:
Toast.makeText(mActivity.getBaseContext(),"Item selected is 1",Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(mActivity.getBaseContext(),"Item selected is 2",Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(mActivity.getBaseContext(),"Item selected is 3",Toast.LENGTH_SHORT).show();
break;
}
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
Run Code Online (Sandbox Code Playgroud)
现在显示包含3个项目的对话框,点击第1项显示"项目选择为1"很快我点击下一个项目但在~5秒后显示"项目选择为2" .但如果我想立即显示第二项,我该怎么办?
简而言之,刷新Toast的逻辑是什么?
任何帮助是极大的赞赏.