Cardview点击事件不能在android上运行?

时间:2016-02-17 11:57:24

标签: android android-adapter android-recyclerview

我在卡片视图中成功显示数据列表,但现在我想打开另一个活动并显示点击数据的详细信息。

我有三个类MainActivity,ContactAdapter,Contact。

主要活动代码:

RecyclerView recyclerView;
RecyclerView.Adapter adapter;
RecyclerView.LayoutManager layoutManager;
String[] name,email;
ArrayList<Contact> list = new ArrayList<Contact>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    name = getResources().getStringArray(R.array.person_name);
    email = getResources().getStringArray(R.array.person_email);

    int count = 0;
    for (String Name : name)
    {
        Contact contact = new Contact(Name,email[count]);
        count++;
        list.add(contact);
    }
    recyclerView= (RecyclerView) findViewById(R.id.recycler_view);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    adapter=new ContactAdapter(list);
    recyclerView.setAdapter(adapter);

我试过但它没有用。

适配器代码:

public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactViewHolder> {
    ArrayList<Contact> contacts = new ArrayList<Contact>();

    public ContactAdapter(ArrayList<Contact> contacts) {
        this.contacts = contacts;
    }

    @Override
    public ContactViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_layout, parent, false);
        ContactViewHolder contactViewHolder = new ContactViewHolder(view);
        return contactViewHolder;
    }

    @Override
    public void onBindViewHolder(ContactViewHolder holder, int position) {
        Contact CON = contacts.get(position);
        holder.person_name.setText(CON.getName());
        holder.person_email.setText(CON.getEmail());
    }

    @Override
    public int getItemCount() {
        return contacts.size();
    }

    public static class ContactViewHolder extends RecyclerView.ViewHolder {
        TextView person_name, person_email;

        public ContactViewHolder(View view) {
            super(view);
            person_name = (TextView) view.findViewById(R.id.person_name);
            person_email = (TextView) view.findViewById(R.id.person_email);

            view.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    Toast.makeText(v.getContext(), "OnClick Version :",
                            Toast.LENGTH_SHORT).show();
                }
            });

            view.setOnLongClickListener(new View.OnLongClickListener() {

                @Override
                public boolean onLongClick(View v) {

                    Toast.makeText(v.getContext(), "OnLongClick Version :",
                            Toast.LENGTH_SHORT).show();
                    return true;

                }
            });
        }
    }
}

1 个答案:

答案 0 :(得分:0)

在你的适配器中执行以下操作:

    public class ProdutoAdapter extends RecyclerView.Adapter<ProdutoAdapter.ProdutoViewHolder>{
    private static ProdutoAdapter.ClickListener clickListener; //this is important
    private List<Produto> produtos; //this is my list of beans

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

    @Override
    public ProdutoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_produtos, parent, false);
        ProdutoViewHolder mvh = new ProdutoViewHolder(v);
        return mvh;
    }

    @Override
    public void onBindViewHolder(ProdutoViewHolder holder, int position) {
        //holder.nome.setText(this.produtos.get(position).getNome());
        holder.img.setImageDrawable(produtos.get(position).getImgDrawable());
        holder.nome.setText(produtos.get(position).getNome());
        holder.preco.setText(String.valueOf(produtos.get(position).getPreco()));
    }

    @Override
    public int getItemCount() {
        return this.produtos.size();
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    public static class ProdutoViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{
        Produto produto;
        CardView cardView;
        TextView nome;
        TextView preco;
        ImageView img;

        ProdutoViewHolder(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
            itemView.setOnLongClickListener(this);
            cardView = (CardView) itemView.findViewById(R.id.cardviewProduto);
            nome = (TextView) itemView.findViewById(R.id.nome);
            preco = (TextView) itemView.findViewById(R.id.preco);
            img = (ImageView) itemView.findViewById(R.id.foto);
        }

        public void setItem(Produto produto){
            this.produto = produto;
        }

        public Produto getItem(){
            return this.produto;
        }

//this is what you'll need in your activity
        @Override
        public void onClick(View v) {
            clickListener.onItemClick(getAdapterPosition(), v);
        }

        @Override
        public boolean onLongClick(View v) {
            clickListener.onItemLongClick(getAdapterPosition(), v);
            return false;
        }
    }

    public void setOnItemClickListener(ClickListener clickListener){
        ProdutoAdapter.clickListener = clickListener;
    }

    public interface ClickListener {
        void onItemClick(int position, View v);
        void onItemLongClick(int position, View v);
    }

}

并在您的活动中:

    public static ProdutoAdapter mAdapter;
myActivity.mAdapter.setOnItemClickListener(new ProdutoAdapter.ClickListener() {
                @Override
                public void onItemClick(int position, View v) {
//do what you want
                }

                @Override
                public void onItemLongClick(int position, View v) {

                }
            });
            myActivity.mRecyclerView.setAdapter(mAdapter);