0

只是为了澄清我在问什么:当调用 OnStop()/OnPause()/Edit Text OnClick() 时,我已经关闭了 toast。尽管标题看起来像,但这不是重复:当应用程序关闭时如何停止显示来自 Toast 的消息?(对不起,我找不到更好的标题)

所以我不是在问如何关闭 toast,而是在完成应用程序之前如何更新关闭的 toast。

举个例子,当您删除设置的闹钟时,我的 nexus 5 (4.4.4) 原生闹钟会显示通知。如果在关闭/最小化应用程序时,它会关闭 toast,然后关闭/最小化应用程序。我会知道一个允许我这样做的代码。

这是我的示例代码:

public class MainActivity extends Activity {
        private Toast toast;
        private Button buttonClick;
        private EditText editTextClick;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            buttonClick = (Button) findViewById(R.id.buttonClick);
            editTextClick = (EditText) findViewById(R.id.editTextClick);

            buttonClick.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if (toast != null) {
                        toast.cancel();
                    }
                    toast = Toast.makeText(this, "This might close before the app stop", Toast.LENGTH_SHORT);
                    toast.show();
                }
            });


             editTextClick.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    toast = Toast.makeText(this, "This might close before the keyboard open", Toast.LENGTH_SHORT);
                    toast.show();
                    if (toast != null) {
                         toast.cancel();
                    }
                }
            });

        }

        @Override
        protected void onStop() {
            // TODO Auto-generated method stub
            if (toast != null) {
                toast.cancel();
            }

            super.onStop();
        }

        @Override
        protected void onPause() {
            // TODO Auto-generated method stub
            if (toast != null) {
                toast.cancel();      // This close toast when stop called 
            }
            super.onPause();
        }

    }

每次单击编辑文本时,我都会尝试关闭 toast 通知。但它首先打开键盘(将吐司和键盘重叠一段时间)而不是关闭吐司。

当我关闭应用程序或备用应用程序时也会发生同样的情况。吐司在与其他布局重叠后消失。

我已经尝试使用 a Thread.sleep(1000);(在 try-catch 子句中) 和 after if(toast != null) { toast.cancel(); },但没有改变任何东西。

我可以在这个示例代码中做些什么来让它关闭 toast 然后做其他事情(比如打开键盘、关闭应用程序、显示最近的应用程序等)。

4

1 回答 1

0

也许您不打算这样做,Toast 的设计方式是在给定时间后它们会简单地消失。

您可能要做的是将要关闭的事件的 Toast 持续时间设置为零,但要小心,因为 cero 就像设置 LENGTH_SHORT 一样,您可能必须覆盖可能的值,它们应该是毫秒。

尝试在您的 onclick 侦听器之外初始化您的吐司,这可能会让您的 onStop 和 onPause 取消工作,看看这个答案:https ://stackoverflow.com/a/17740590/3657704

于 2014-07-10T19:48:35.430 回答