【问题标题】:How to get data from custom dialog and create a new item in recyclerview?如何从自定义对话框中获取数据并在 recyclerview 中创建新项目?
【发布时间】:2019-10-14 19:46:39
【问题描述】:

我需要点击 fab 并调用自定义对话框。那么,如何从对话框(DialogFragment)中获取数据并在recyclerview中创建一个新项目,其中包含这些数据?

编辑:现在我有 NullPointerException。代码在这里:

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

    recyclerView = findViewById(R.id.recyclerView);
    adapter = new UserAdapter(users, this);

    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(adapter);

    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            createDialog();
        }
    });
}

public void createDialog(){
    View view = LayoutInflater.from(this).inflate(R.layout.dialog_user, null, false);
    final EditText username = view.findViewById(R.id.username);
    final EditText pass = view.findViewById(R.id.password);
    final AlertDialog.Builder builder = new AlertDialog.Builder(this)
            .setTitle("Title")
            .setView(view)
            .setPositiveButton("Add", null)
            .setNegativeButton("Cancel", null)
            .setCancelable(false);

    final AlertDialog dialog = builder.create();
    dialog.show();

    dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                //update RecyclerView
                users.add(new User(username.toString(), pass.toString()));
                dialog.dismiss();
        }
    });
}

【问题讨论】:

  • 你写过代码吗?
  • 我有一个简单的 recyclerview 和一个简单的对话框,似乎第二个会改变
  • 您是否曾以您想要完成的工作的心态处理任何代码?你的对话框有用户填写的表格吗?
  • 是的,它有一个 EditText 视图
  • 你的回收器正在接收我假设的字符串数组列表?

标签: java android android-recyclerview dialog


【解决方案1】:

您可以使用简单的 AlertDialogRecyclerView 来实现此目的。谢谢

View view = LayoutInflater.from(this).inflate(R.layout.edit_layout, null, false);
            final EditText editText = view.findViewById(R.id.editText);
            AlertDialog.Builder builder = new AlertDialog.Builder(this)
                    .setTitle("Title")
                    .setView(view)
                    .setPositiveButton("Add", null)
                    .setNegativeButton("Cancel", null)
                    .setCancelable(false);

            AlertDialog dialog = builder.create();
            dialog.show();

            dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //fdgdf
                    if(!TextUtils.isEmpty(editText.getText())) {
                        //update RecyclerView
                        dialog.dismis();
                    } else {
                       //Toast to show empty
                    }
                }
            });

R.layout.edit_layout 包含 ID 为 editText

EditText

【讨论】:

  • 你有没有使用ArrayList为RecyclerView初始化适配器?如果是这样,那么只需将新项目添加到 arraylist 和 notify 适配器关于数据集更改
  • 我只需要在ArrayList中添加新的POJO?
  • 使用对话框中的内容,创建用户 POJO 并将其添加到 ArrayList 并通知
  • 在 RecyclerView、FAB 所在的 Activity 类中。创建一个函数并粘贴此代码并单击 FAB 调用此函数以弹出对话框并执行其余操作
  • 我创建了一个函数,但是我有 NPE,为什么?
【解决方案2】:

基本上,您希望在单击 fab(浮动操作按钮)时弹出特定表单,然后在完成此特定表单后将任何项目添加到回收站视图。

以下是完成这些要求的步骤 -

1。将 OnClickListener 添加到 fab 并打开对话框。
2。在表单中添加提交按钮。将 OnClickListener 设置为它。
3。在提交按钮上单击(执行以下步骤)以任何形式存储表单信息(制作 POJO 的对象)
4。在 Recycler DataSet 中添加数据。在 Recycler Adapter 上调用 notifyDataSetChanged。
5。调用 dialog.dismiss()。

【讨论】:

  • 你能详细解释一下第二段吗?
  • 第二段是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多