java - 从 AlertDialog 中创建并显示 Toasts/Snackbars

标签 java android android-alertdialog android-snackbar

我有一个 recyclerlistview,它使用从 AlertDialog 收集的输入进行填充,该 AlertDialog 是从 float 操作按钮生成的。当按下 AlertDialog 中的肯定按钮并且所有输入都正确格式化时,SQLite 数据库就会更新,然后在同一个监听器中创建并显示 snackbar 。

  • 如果输入格式错误,则会显示 toast,但对话框也会关闭,这是我不希望的
  • 如果输入正确,对话框将关闭,数据将添加到列表中,但 SnackBar 不会显示

这是我的 MainActivity 中的 onClickListener:

@Override
 public void onClick(View view) 
 {
switch ( view.getId() )

    {

        case R.id.add_item_btn:

        View addDialogView = getLayoutInflater().inflate(R.layout.add_dialog, null);
        final EditText addItemNameTxt  = addDialogView.findViewById(R.id.add_item_name_txt);
        final EditText addItemCountTxt = addDialogView.findViewById(R.id.add_item_count_txt);

        // something unimportant left out

        new AlertDialog.Builder(this)
        .setView(addDialogView)
        .setCancelable(true)
        .setPositiveButton("Add", new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int i)
            {
                if ( addItemNameTxt.getText().length() == 0 )
                {
                    Toast.makeText(MainActivity.this, "Text cannot be empty", Toast.LENGTH_SHORT).show();
                    return;
                }

                String itemName = addItemNameTxt.getText().toString();
                String itemCount = addItemCountTxt.getText().toString();

                dbHelper.insertTask(itemName, Integer.parseInt(itemCount));
                taskAdapter.swapCursor(dbHelper.getTasks());

                dialog.dismiss();

                Snackbar.make(getLayoutInflater().inflate(R.layout.activity_main, null).findViewById(R.id.rootLayout), String.format("Added \"%s (%s)\" to list", itemName, itemCount), Snackbar.LENGTH_LONG);
            }
        })
        .create().show();

        break;
    }
}

最佳答案

当将按钮放入自定义布局并使用该按钮而不是 Alert Dialog.Positive Button 时,它会起作用(= 成功退出时不会关闭烘烤 + 吃零食)。

            final AlertDialog dialog = new AlertDialog.Builder(this)
            .setView(addDialogView)
            .create();

            addDialogView.findViewById(R.id.add_confirm).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view2) {
                    if ( addItemNameTxt.getText().length() == 0 )
                    {
                        Toast.makeText(MainActivity.this, "Text cannot be empty", Toast.LENGTH_SHORT).show();
                        return;
                    }

                    String itemName = addItemNameTxt.getText().toString();
                    String itemCount = addItemCountTxt.getText().toString();

                    dbHelper.insertTask(itemName, Integer.parseInt(itemCount));
                    taskAdapter.swapCursor(dbHelper.getTasks());

                    Snackbar.make(view, String.format("Added \"%s (%s)\" to list", itemName, itemCount), Snackbar.LENGTH_LONG).show();

                    dialog.dismiss();
                }
            });
            dialog.show();

关于java - 从 AlertDialog 中创建并显示 Toasts/Snackbars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57415783/

相关文章:

java - 无法通过 JDBC 连接到 Oracle 11g

android - 在 EditTextPreference 对话框中更改 positveButtonText 上的文本大小

java - 应用程序在按钮触摸时崩溃 - onTouch 方法错误?

android - 是否可以创建一个可扩展的列表 AlertDialog?

java - 我正在尝试使用 Junit、mockito 和 PowerMock 创建单元测试

java - 当我尝试发送到服务器时,为什么我的 getter 返回 null?

java - 获取Map对象时出现不兼容的类型异常

android - 使用 picasso 在图像中添加标记

android - Alertdialog 不起作用,它在 Android 中产生异常

java - 警报对话框无法正常运行。