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

0

So I have a problem that I redirect to another activity in the button click, but inside an adapter class I can not do anything, I can not 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
            }
        });

    }

}
    
asked by anonymous 22.05.2016 / 05:03

1 answer

5

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

To have a Context available in your Adapter declare a constructor to receive 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);
            }
        });

    }
}

When you instantiate the Adapter , in addition to passing the constructor to List<Produto> , also pass your Activity .

    
22.05.2016 / 17:02