У меня есть модальный (диалог) с текстом редактирования внутри и кнопкой отправки, я пытаюсь просто отправить контент внутри текста редактирования при нажатии кнопки, дело в том, что отправка контента работает, но когда я звоню 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;
}

}

Большое спасибо!

1
Vitorlsa 29 Окт 2019 в 20:24

1 ответ

Лучший ответ

Во-первых вы должны сделать диалоговое окно неотменяемым, чтобы внешний клик не закрывал его с помощью 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();
    }
});
0
Md. Asaduzzaman 29 Окт 2019 в 19:43