java - 在 for 循环之前显示 toast 不起作用

标签 java android loops for-loop android-toast

我试图在 for 循环之前显示 toast ,但是, toast 没有显示。我也尝试添加一个 snackbar ,但这也没有用。我想知道为什么 toast 不先烧。我什至尝试了以下方法,但它一直在循环:

Toast toast = Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_SHORT);
while (!toast.getView().isShown()) {
    toast.show();
}

如何在 for 循环之前显示 toast ?

ArrayList<String> pizzaBases = new ArrayList<> ();    

@Override
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            main.runOnUiThread(new Runnable() {
                public void run() {
                        Toast.makeText(getApplicationContext(), "Hello", Toast.LENGTH_SHORT);
                        Snackbar.make(findViewById(android.R.id.content), "Had a snack at Snackbar", Snackbar.LENGTH_LONG).show();
                    }
            });

            SharedPreferences preferences = getPreferences(Context.MODE_PRIVATE);

            for (int i = 0; i < 100; i++) {
                try {
                    String pizza = preferences.getString("TypeOfBase" + i, "");
                    if (!pizza.equals("")) {
                        pizzaBases.add(pizza);
                    }
                } catch (NullPointerException e) {
                    //Do nothing here
                }
            }
        }
    });

    Button button1 = (Button) findViewById(R.id.buttonOne);
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            for (String myString : pizzaBases) {
                System.out.println(myString);
            }
        }
    });
}

我尝试了 runOnUiThread、asynctask 和 while 循环等解决方案,但它们都没有显示 toast 或 snackbar。

编辑:

我发现 UI 仅在 for 循环完成后更新。我想知道为什么它会这样做,尽管它首先被激活。

最佳答案

问题是 Toast.show() 是异步的。在当前方法返回之前,toast 不会显示,即便如此,Android 可能会决定稍后显示它(例如,如果屏幕上已经显示了另一个 toast),甚至根本不显示。

你真的需要使用原生的 toasts 吗?也许最好的办法是使用另一个更可靠的系统。自定义 View 出现在看起来像 toast 的所有内容之上并且您可以立即可靠地显示怎么样?

关于java - 在 for 循环之前显示 toast 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41790019/

相关文章:

java - Java中具体的递归方法是如何工作的? Think Java 书中的练习 6.6

java - 试图从 ListView 中的 TextView 中获取值 android 中的单击事件

android - 自定义 ListView Android

android - 在 Android 中镜像前置摄像头

C - 在循环中创建结构成员?

C++ 函数和循环

java - 如何拆分字符串并包含拆分器?

java - 如何用编译时泛型验证替换运行时instanceof检查

android - 借助 MergeAdapter、StickyListHeaders 和 ListViewAnimations 的强大功能,我是 Android 的队长

javascript - 使用循环而不是子字符串。数组循环?