Redirecionamento no botão do AlertDialog

Olá galera, eu utilizo o android Studio, criei um AlertDialog usando DialogFragment, ele me disponibiliza dois botões e já tentei colocar um redirecionamento nos botões e não consigo porque ele não recebe View como parâmetro. Por favor me ajudem aqui vai meu código :

public class caixaConfirmacao extends DialogFragment {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(R.string.dialog_message)
            .setTitle(R.string.dialog_title);

    // Adiciona os botões
    builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
           //Redirecionamento do botão
           Intent redireciona = new Intent(this, Vendas.class);
           startActivity(redireciona);

        }
    }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {

          
        }
      
    });
    return builder.
    }

}

Cria uma variavel global de contexto private Context mContext e cria um construtor pra classe caixaConfirmacao dessa forma:

  public caixaConfirmacao (Context mContext){
      this.mContext=mContext;
       }

e na hora de chamar a activity vc usa o mContext no lugar de this

       Intent redireciona = new Intent(mContext, Vendas.class);
       startActivity(redireciona);

e na activity que chama a classe caixaConfirmacao vc passa o contexto com argumento.

Só tem um problema, o botão que abre o dialog está em outra classe e é instanciado dessa forma:

//BOTÃO DE CANCELAR
cancela.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
caixaConfirmacao confirma = new caixaConfirmacao();
confirma.show(getSupportFragmentManager(), “dialog”);
}
});

E pede pra passar o parâmetro do construtor. :confused:

Então, é simples faz o seguinte

public class caixaConfirmacao extends DialogFragment {

private Context mContext; // contexo que sera usado para abrr activity

    public caixaConfirmacao (Context mContext){
   this.mContext=mContext; // construtor inicializa o context com o context que foi passao pela  primeira activity 
   }

 @Override
 public Dialog onCreateDialog(Bundle savedInstanceState) {

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_message)
        .setTitle(R.string.dialog_title);

// Adiciona os botões
builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
       //Redirecionamento do botão
       Intent redireciona = new Intent(mContext, Vendas.class); //usa o context pra abrir a activity
       startActivity(redireciona);

    }
}).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {

      
    }
  
});
return builder.
}

}

E na sua activity inicial (a que chama o dialogo) vc faz assim

    //BOTÃO DE CANCELAR
       cancela.setOnClickListener(new View.OnClickListener() {
       public void onClick(View v) {
       caixaConfirmacao confirma = new caixaConfirmacao(MinhaActivity.this); // passa o context para o dialogo
       confirma.show(getSupportFragmentManager(), "dialog");
    }
    });
1 curtida

Ah! experimente usar o getActivity() n lugar de this, em

          Intent redireciona = new Intent(this, Vendas.class);
          startActivity(redireciona);

isso deve resolver seu problema de forma simples. Se o getActivity() retornar null então use a outra resposta que eu dei q tbm resolve.

1 curtida

Man deu certinho, você é o cara, Te amo!!

1 curtida