How to call the startActivity() method in an Adapter?

Asked

Viewed 1,352 times

0

So I have a problem that redirect to another Activity at the click of the button, only within an Adapter class I can’t do anything, I can’t call startActivity().

public class ProdutoRecyclerAdapter extends RecyclerView.Adapter<ProdutoRecyclerAdapter.ViewHolder> {
private final List<Produto> produtos;

public ProdutoRecyclerAdapter(final List<Produto> produtos) {
    this.produtos = produtos;
}


public static class ViewHolder extends RecyclerView.ViewHolder {
    ImageView imgProduto;
    TextView txtTitulo;
    TextView txtDescricao;
    TextView txtPreco;
    Button btnDetalhes;

    public ViewHolder(final View itemView) {
        super(itemView);

        imgProduto = (ImageView) itemView.findViewById(R.id.imgProduto);
        txtTitulo = (TextView) itemView.findViewById(R.id.txtTitulo);
        txtDescricao = (TextView) itemView.findViewById(R.id.txtDescricao);
        txtPreco = (TextView) itemView.findViewById(R.id.txtPreco);
        btnDetalhes = (Button) itemView.findViewById(R.id.btnDetalhes);
        btnDetalhes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Aqui não chama o startActivity
            }
        });

    }

}

1 answer

5

startActivity() is a class method Context, in order to use it you must have access to an instance of that class.

To have a Context available on your Adapter declare a builder who receives it:

public class ProdutoRecyclerAdapter extends RecyclerView.Adapter<ProdutoRecyclerAdapter.ViewHolder> {
private final List<Produto> produtos;
private final Context context;

public ProdutoRecyclerAdapter(final List<Produto> produtos, final Context context) {
    this.produtos = produtos;
    this.context = context;
}


public static class ViewHolder extends RecyclerView.ViewHolder {
    ImageView imgProduto;
    TextView txtTitulo;
    TextView txtDescricao;
    TextView txtPreco;
    Button btnDetalhes;

    public ViewHolder(final View itemView) {
        super(itemView);

        imgProduto = (ImageView) itemView.findViewById(R.id.imgProduto);
        txtTitulo = (TextView) itemView.findViewById(R.id.txtTitulo);
        txtDescricao = (TextView) itemView.findViewById(R.id.txtDescricao);
        txtPreco = (TextView) itemView.findViewById(R.id.txtPreco);
        btnDetalhes = (Button) itemView.findViewById(R.id.btnDetalhes);
        btnDetalhes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Aqui chama o startActivity,  
                //mas antes crie um Intent.

                context.startActivity(intent);
            }
        });

    }
}

By instantiating the Adapter, in addition to pass to the builder to List<Produto>, also pass your Activity.

  • 1

    Thanks more I made different I took the view from onClick and pulled it the context and gave startActivity and it worked, but this way also the right worth

Browser other questions tagged

You are not signed in. Login or sign up in order to post.