Desculpe-me pelo texto longo. É assim:
Estou inflando um layout personalizado no clique de um TextView pelo “MyViewHolder holder” utilizando o AlertDialog.Builder implementado em uma classe Adapter.
Infla perfeitamente, sem erros.
O fato é que quando clico no layout inflado para alterar o valor no EditText, normalmente com um clique de velocidade média, o App simplesmente fecha. Coloquei tudo em um bloco try/catch, mesmo assim não mostra o erro. Se eu clico e seguro um pouco ele aceita (nem sempre), não fecha e a ação, quando confirmo no botão do AlertDialog, é executada sem problemas.
Tentei depurar e todos os valores são preenchidos corretamente. Não traz exceções.
E normalmente é no primeiro click depois que carrega o App após um período inativo ou na primeira execução. Aí o App fecha, eu abro novamente e depois segue mais firme, sem erros constantes, mas, ainda ocorrendo um ou outro. Como se faltasse carregar algo completamente!
Observando mais minuciosamente, está sendo inflado pela classe Adapter e os erros só ocorrem nas classes Fragments, quando são chamados e clicados. Nas Activity`s não ocorre o fechamento.
Não poderia inflar pelo recycler, pois, são muitos fragments e eu teria que implementar em cada um.
Obs. Eu inflo por um clique na Imagem do adapter (uma ação) e no textView do adapter (outra ação) = carrinho e favoritos que funcionam em conjunto, mas, com ações distintas..
Alguém teria uma maneira ou um recurso diferente que possa me ajudar à resolver isto? O mais detalhado possível, pois, não tenho muito habilidade ainda.
Desde já fico muito grato.
Abaixo foram as tentativas que eu fiz e todas funcionam. É só a questão do bug de clique mesmo:
01- import androidx.appcompat.app.AlertDialog;
ou
02- import android.app.AlertDialog;
03-
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.dialog_Solicitacao, null, false);
builder.setView(view);
04-
View view = View.inflate(context,R.layout.dialog_Solicitacao,null);
builder.setView(view);
05-
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Solicitação");
builder.setMessage("Digite o valor");
EditText editValor = new EditText(context);
builder.setView(editValor);
LAYOUT ORIGINAL INFLADO PELA CLASSE ADAPTER
try{
// >>> Caixa de diálogo
AlertDialog.Builder builder = new AlertDialog.Builder(context);
// builder = construtor
builder.setTitle("Carrinho");
builder.setMessage("Exemplo: 2 (igual à 2UN)");
builder.setIcon(R.drawable.logo_marca);
//LayoutInflater inflater = LayoutInflater.from(context);
//View viewQuantidade = inflater.inflate(R.layout.dialog_quantidade_car, null, false);
// ou
//View viewQuantidade = LayoutInflater.from(context).inflate(R.layout.dialog_quantidade_car, null);
// ou
View viewQuantidade = View.inflate(context,R.layout.dialog_quantidade_car,null);
editQuantidade = viewQuantidade.findViewById(R.id.editText_DialogQteCar_Quantidade);
editQuantidade.setText("1"); // Já recebe um valor padrão
editQuantidade.requestFocus();
editQuantidade.selectAll(); // Para focar e selecionar
TextView textUnidade = viewQuantidade.findViewById(R.id.textView_DialogQteCar_Unidade);
textUnidade.setText("Unidade");
TextView textObserv = viewQuantidade.findViewById(R.id.textView_DialogQteCar_Observacao);
textObserv.setText(textObserv.getText()); // Texto padrão do Layout
builder.setView(viewQuantidade);
builderUp.setPositiveButton("Confirmar", new DialogInterface.OnClickListener(){...
closeKeyboard()
builderUp.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {...
closeKeyboard()
AlertDialog dialogUp = builderUp.create(); // Criar
dialogUp.show(); // Exibir
showKeyboard();
private void showKeyboard(){...
private void closeKeyboard(){...