猿问

在 AlertDialog 中创建和显示 Toasts/Snackbars

我有一个 recyclerlistview,它使用从 AlertDialog 收集的输入填充,AlertDialog 是从浮动操作按钮生成的。当按下 AlertDialog 中的肯定按钮并且所有输入的格式都正确时,SQLite 数据库会更新,然后在同一个侦听器中制作并显示小吃店。

  • 如果输入格式错误,则会显示吐司,但也会关闭我不希望的对话框

  • 如果输入正确,对话框关闭,数据被添加到列表中,但 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;

    }

}


SMILET
浏览 135回答 1
1回答

江户川乱折腾

当将一个按钮放入自定义布局并使用该按钮代替 AlertDialog.PositiveButton 时,它会起作用(= 不关闭烘烤 + 成功退出时吃零食)。            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();
随时随地看视频慕课网APP

相关分类

Java
我要回答