Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cardview点击事件在android上不起作用?_Android_Android Adapter_Android Recyclerview - Fatal编程技术网

Cardview点击事件在android上不起作用?

Cardview点击事件在android上不起作用?,android,android-adapter,android-recyclerview,Android,Android Adapter,Android Recyclerview,我成功地在卡片视图中显示了数据列表,但现在我想打开另一个活动并显示单击数据的详细信息 我有三类主要活动,ContactAdapter,Contact 主要活动代码: RecyclerView recyclerView; RecyclerView.Adapter adapter; RecyclerView.LayoutManager layoutManager; String[] name,email; ArrayList<Contact> list = new ArrayList&l

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

我有三类主要活动,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);
RecyclerView-RecyclerView;
RecyclerView.适配器;
RecyclerView.LayoutManager LayoutManager;
字符串[]名称,电子邮件;
ArrayList=新建ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
name=getResources().getStringArray(R.array.person\u name);
email=getResources().getStringArray(R.array.person\u email);
整数计数=0;
for(字符串名称:Name)
{
联系人=新联系人(姓名、电子邮件[计数]);
计数++;
列表。添加(联系人);
}
recyclerView=(recyclerView)findViewById(R.id.recycler\u视图);
layoutManager=新的LinearLayoutManager(此);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
适配器=新的ContactAdapter(列表);
recyclerView.setAdapter(适配器);
我试过了,但没用

适配器代码:

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;

                }
            });
        }
    }
}
公共类ContactAdapter扩展了RecyclerView.Adapter{
ArrayList联系人=新建ArrayList();
公共联系人适配器(ArrayList联系人){
这个。联系人=联系人;
}
@凌驾
公共联系人ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.card\u View\u layout,parent,false);
ContactViewHolder ContactViewHolder=新的ContactViewHolder(视图);
返回联系人视图持有者;
}
@凌驾
BindViewHolder上的公共无效(ContactViewHolder,内部位置){
Contact CON=contacts.get(位置);
holder.person_name.setText(CON.getName());
holder.person_email.setText(CON.getEmail());
}
@凌驾
public int getItemCount(){
返回contacts.size();
}
公共静态类ContactViewHolder扩展了RecyclerView.ViewHolder{
TextView个人姓名、个人电子邮件;
公共联系人视图持有人(视图){
超级(视图);
person\u name=(TextView)view.findViewById(R.id.person\u name);
person\u email=(TextView)view.findViewById(R.id.person\u email);
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(v.getContext(),“OnClick版本:”,
吐司。长度(短)。show();
}
});
view.setOnLongClickListener(新视图.OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图v){
Toast.makeText(v.getContext(),“OnLongClick版本:”,
吐司。长度(短)。show();
返回true;
}
});
}
}
}

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

    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 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);
    }

}

通过在onClick中放置日志来查看是否调用了onClick。如果单击有效,则Toast应该可以工作,但不需要日志…但Toast没有显示…我对Shashank Udupa的评论是这样说的。如果Toast不起作用,则onClick不起作用。我认为这里的问题是onBind方法:查看onClick是否被pl调用在其中添加日志。如果单击工作,则Toast应该工作,不需要日志…但Toast没有显示…我是对Shashank Udupa的评论说的。如果Toast不工作,则onClick不工作。我认为这里的问题是onBind方法: