Java 访问AlertDialog Builder中的自定义布局元素

Java 访问AlertDialog Builder中的自定义布局元素,java,android,android-studio,Java,Android,Android Studio,我在我的一个Java类中创建了一个警报对话框,我让它从一个自定义布局中拉出来。我想设置PositiveButton以使用布局中的元素来填充我的任务对象(即editName、editDesc)。问题是,我不知道如何从构建器中提取它们。从根目录中提取它们只会使应用程序崩溃 // Functionality for AddTask Button button.setOnClickListener(new View.OnClickListener() {

我在我的一个Java类中创建了一个警报对话框,我让它从一个自定义布局中拉出来。我想设置PositiveButton以使用布局中的元素来填充我的任务对象(即editName、editDesc)。问题是,我不知道如何从构建器中提取它们。从根目录中提取它们只会使应用程序崩溃

// Functionality for AddTask Button
        button.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                // A builder that will create a new dialog using our add task layout
                AlertDialog.Builder addTaskDialog = new AlertDialog.Builder(getContext());
                addTaskDialog.setTitle("Add Task")
                        .setCancelable(true)
                        .setView(getLayoutInflater().inflate(R.layout.new_task_dialog, null))
                        .setPositiveButton("Add", new DialogInterface.OnClickListener()
                        {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i)
                            {
                                // Get our inputs
                                EditText editName = (EditText) root.findViewById(R.id.editTaskName);
                                EditText editDesc = (EditText) root.findViewById(R.id.editTaskDesc);

                                // DO STUFF
                                ArrayList<Category> cats = new ArrayList<Category>();
                                cats.add(Category.CATEGORY00);
                                cats.add(Category.CATEGORY02);
                                cats.add(Category.CATEGORY05);

                                long date = 01022021L;

                                Task testTask = new TaskSingle(editName.getText().toString(), editDesc.getText().toString(), Difficulty.EASY, cats, Color.AQUA, date, false);

                                mTasks.add(testTask);
                                mRecyclerView.getAdapter().notifyDataSetChanged();
                            }
                        });

                // Show out dialog
                addTaskDialog.show();
            }
        });```
//添加任务按钮的功能
setOnClickListener(新视图.OnClickListener()
{
公共void onClick(视图v)
{
//使用“添加任务”布局创建新对话框的生成器
AlertDialog.Builder addTaskDialog=新建AlertDialog.Builder(getContext());
addTaskDialog.setTitle(“添加任务”)
.setCancelable(真)
.setView(GetLayoutFlater().inflate(R.layout.new_task_对话框,null))
.setPositiveButton(“添加”,新建DialogInterface.OnClickListener()
{
@凌驾
公共void onClick(DialogInterface,inti)
{
//获取我们的输入
EditText editName=(EditText)root.findViewById(R.id.editTaskName);
EditText editDesc=(EditText)root.findViewById(R.id.editTaskDesc);
//做事
ArrayList猫=新的ArrayList();
cats.add(类别00);
cats.add(类别02);
cats.add(类别05);
长日期=01022021L;
Task testTask=new TaskSingle(editName.getText().toString(),editDesc.getText().toString(),难度.EASY,猫,颜色.AQUA,日期,false);
mTasks.add(testTask);
mRecyclerView.getAdapter().notifyDataSetChanged();
}
});
//显示对话框
addTaskDialog.show();
}
});```

我解决了自己的问题。技巧是将传递给onClick函数的dialoginterface转换为AlertDialog:

.setPositiveButton("Add", new DialogInterface.OnClickListener()
{
   @Override
   public void onClick(DialogInterface dialogInterface, int i)
   {
      // Get our inputs
      EditText editName = (EditText) ((AlertDialog) dialogInterface).findViewById(R.id.editTaskName);
      EditText editDesc = (EditText) ((AlertDialog) dialogInterface).findViewById(R.id.editTaskDesc);