java - 对话框关闭在适配器内部不起作用

标签 java android android-studio

我有一个模态(对话框),里面有一个编辑文本和一个发送按钮,我想要做的只是在单击按钮时发送编辑文本中的内容,问题是,发送内容是工作,但是当我调用 mydialog.dismiss(); 时它不起作用。它使用另一个类的实例来调用方法改造,在“完成”和“未完成”按钮内我有“enviar”(发送)按钮,这是我试图关闭模式的按钮。

这是适配器代码:

public TasksAdapter(@NonNull Context context, @SuppressLint("SupportAnnotationUsage") @LayoutRes ArrayList<Tasks> list){
    super(context, 0, list);
    sContext = context;
    taskData = list;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent){

    View listItem = convertView;
    if(listItem == null)
        listItem = LayoutInflater.from(sContext).inflate(R.layout.item_tasks, parent,false);

    final Tasks presenteTask = taskData.get(position);

    TextView taskTitle = (TextView) listItem.findViewById(R.id.tasksTitle);
    taskTitle.setText(presenteTask.getTitle());

    EditText taskColor = (EditText) listItem.findViewById(R.id.taskColor);
    if(presenteTask.getHexaColor().isEmpty()){
        HexaColor = "#FFFFFF";
    }
    else{
        HexaColor = presenteTask.getHexaColor();
        taskColor.setBackgroundColor(Color.parseColor(HexaColor));
    }

    TextView taskTime = (TextView) listItem.findViewById(R.id.taskTime);
    taskTime.setText(presenteTask.getTimeStart().toString().substring(0,5));

    tasksModal = new Dialog(sContext);
    tasksModal.setCancelable(false);
    tasksModal.setContentView(R.layout.modal_tasksdone);
    tasksModal.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    final EditText comentarios = (EditText) tasksModal.findViewById(R.id.edtComentario);
    final Calendario calendario = new Calendario();

    Button done = (Button) listItem.findViewById(R.id.tasksDone);
    done.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            yorn = true;
            tarefaId = presenteTask.getTaskId();
            data = presenteTask.getDataTask();
            hora = String.valueOf(presenteTask.getTimeStart());

            tasksModal.findViewById(R.id.btnSend).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    comentario = comentarios.getText().toString();
                    if(comentario.equals("")){
                        Toast.makeText(sContext,"Por favor digite um comentário.", Toast.LENGTH_SHORT).show();
                        tasksModal.dismiss();
                    }
                    else{
                        calendario.retrofitDoneTasks(tarefaId, comentario, data, hora, yorn, tarefaRealizadaId);
                        tasksModal.dismiss();
                    }
                }
            });

            tasksModal.show();
        }
    });

    Button notDone = (Button) listItem.findViewById(R.id.tasksNotDone);
    notDone.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            yorn = false;
            tarefaId = presenteTask.getTaskId();
            data = presenteTask.getDataTask();
            hora = String.valueOf(presenteTask.getTimeStart());

            tasksModal.findViewById(R.id.btnSend).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    comentario = comentarios.getEditableText().toString();
                    if(comentario.equals("")){
                        Toast.makeText(sContext,"Por favor digite um comentário.", Toast.LENGTH_SHORT).show();
                        tasksModal.dismiss();
                    }
                    else{
                        calendario.retrofitDoneTasks(tarefaId, comentario, data, hora, yorn, tarefaRealizadaId);
                        tasksModal.dismiss();
                    }
                }
            });

            tasksModal.show();
        }
    });

    return listItem;
}

非常感谢!

最佳答案

首先您必须使您的对话框不可取消,这样外部点击就不会使用 tasksModal.setCancelable(false);

关闭它

其次 无需重复代码即可在done/undone 按钮单击内创建对话框。因此,删除它并将其移动到 TasksAdapter 构造函数。

第三 您不会在点击done 按钮时关闭对话框。所以,添加这个 tasksModal.dismiss();

检查并尝试使用以下代码:

EditText comentarios;
Calendario calendario;

public TasksAdapter(@NonNull Context context, @SuppressLint("SupportAnnotationUsage") @LayoutRes ArrayList<Tasks> list){
    super(context, 0, list);
    sContext = context;
    taskData = list;
    tasksModal = new Dialog(sContext);
    tasksModal.setCancelable(false); //make it un cancelable
    tasksModal.setContentView(R.layout.modal_tasksdone);
    tasksModal.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    comentarios = (EditText) tasksModal.findViewById(R.id.edtComentario);
    calendario = new Calendario();
}
-------------------------------------------------------------
Button done = (Button) listItem.findViewById(R.id.tasksDone);
done.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        comentarios.setText("");
        yorn = true;
        tarefaId = presenteTask.getTaskId();
        data = presenteTask.getDataTask();
        hora = String.valueOf(presenteTask.getTimeStart());

        tasksModal.findViewById(R.id.btnSend).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                comentario = comentarios.getEditableText().toString();
                if(!comentario.equals("")){
                    tasksModal.dismiss(); //dismiss here
                    calendario.retrofitDoneTasks(tarefaId, comentario, data, hora, yorn, tarefaRealizadaId);
                }
                else{
                    Toast.makeText(sContext,"Por favor digite um comentário.", Toast.LENGTH_SHORT).show();
                }
            }
        });

        tasksModal.show();
    }
});

Button notDone = (Button) listItem.findViewById(R.id.tasksNotDone);
notDone.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        comentarios.setText("");
        yorn = false;
        tarefaId = presenteTask.getTaskId();
        data = presenteTask.getDataTask();
        hora = String.valueOf(presenteTask.getTimeStart());

        tasksModal.findViewById(R.id.btnSend).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                comentario = comentarios.getEditableText().toString();
                if(comentario.equals("")){
                    Toast.makeText(sContext,"Por favor digite um comentário.", Toast.LENGTH_SHORT).show();
                }
                else{
                    tasksModal.dismiss();
                    calendario.retrofitDoneTasks(tarefaId, comentario, data, hora, yorn, tarefaRealizadaId);
                }
            }
        });

        tasksModal.show();
    }
});

关于java - 对话框关闭在适配器内部不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58612561/

相关文章:

android - 为什么Android Studio中的源码是 'all red'

android-studio - 从Eclipse迁移后,Android Studio Build无法正常工作

java - Playframework - 如何在应用程序/ View 下创建子包?

java - 显示 CardLayout 的上一个选项卡

java - 如何仅使用应用程序打开文件

android - 翻译动画看起来真的很慢/生涩/滞后

android - 使用存储访问框架请求访问文件夹时,Intent.FLAG_GRANT_PREFIX_URI_PERMISSION 有什么用?

java - 如何在 fragment 中放置或替换列表

java - CompletableFuture 跨微服务(JVM)

java - 如何以编程方式从 GCP registry 获取已发布的 docker 镜像列表