Ir ao conteúdo
  • Cadastre-se

Android SDK Layout Inflater com bug, pela Classe Adapter Android


Posts recomendados

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 mas 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 de carregar 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 recyclerView, pois, são muitos fragments e eu teria que implementar em cada um.

 

Obs. Eu inflo por um clique numa ImageView 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(){... // Ativar teclado

private void closeKeyboard(){... // Desativar teclado

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!