简体   繁体   English

监听器界面无法在回收站视图中使用onClick for cardviews

[英]Listener interface isn't working with onClick for cardviews in a recycler view

I have several cardviews on my layout. 我的布局上有几张卡片视图。 When one gets clicked it should call my Listener's onClick method which will start EquationsActivity and pass it the position of the card. 当一个人被点击时,它应该调用我的Listener的onClick方法,该方法将启动EquationsActivity并将其传递给卡的位置。 That is not working. 那不行。 My recyclerFragment is in a tablayout. 我的recyclerFragment是一个tablayout。 I've looked and looked and I can't seem to figure out the problem! 我看了看,我似乎无法弄清楚问题! All suggestions are appreciated!! 所有建议都表示赞赏!!

My recyclerAdapter: 我的recyclerAdapter:

public class recylcerAdapter extends       RecyclerView.Adapter<recylcerAdapter.ViewHolder> { 

    private Listenerr listener;
    private int[] imageIds;
    private String[] nameArray;



    public interface Listenerr{

        void onClick(int position);
    }

    public static class ViewHolder extends RecyclerView.ViewHolder{


        private CardView cardView;

        public ViewHolder(CardView v){
            super(v);
            cardView = v;

        }
    }


    public recylcerAdapter(Context context, String title, Cursor cursor, int[]imageIds, String[]nameArray){

        this.imageIds = imageIds;
        this.nameArray = nameArray;
    }

    public void setListener(Listenerr listener){ 
        this.listener = listener;
    }

    @Override
    public  recylcerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        //create a new view
        CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_main, parent, false);
        return new ViewHolder(cardView);

    }
    @Override
    public void onBindViewHolder(ViewHolder holder, final int position){
        //set the values inside the given view

        CardView cardView = holder.cardView;
        ImageView imageView = (ImageView) cardView.findViewById(R.id.list_icon);
        Drawable drawable = cardView.getResources().getDrawable(imageIds[position]);
        imageView.setImageDrawable(drawable);
        imageView.setContentDescription(nameArray[position]);
        TextView textView = (TextView) cardView.findViewById(R.id.card_text);
        textView.setText(nameArray[position]);

        cardView.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                if(listener != null){
                    Log.v("hitsOnClick", "It has been hit");
                    listener.onClick(position);

                }
            }
        });
    }

    @Override
    public int getItemCount(){
        //return number of items in the data set
        return nameArray.length;
    }
}

My recycler fragment code: 我的Recycler片段代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    new listPop().execute();
    RecyclerView recyclerView = (RecyclerView) inflater.inflate(R.layout.recylcler_layout, container, false);


    recylcerAdapter RecylcerAdapter =
            new recylcerAdapter(getActivity(), "Geometry", cursor, imageArray, names.toArray(new String[names.size()]));
    LinearLayoutManager manager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(manager);
    recyclerView.setAdapter(RecylcerAdapter);

    RecylcerAdapter.setListener(new recylcerAdapter.Listenerr() {
        @Override
        public void onClick(int position) {
            Intent intent = new Intent(getActivity(), EquationsActivity.class);
            intent.putExtra(EquationsActivity.POSITION, position);
            getActivity().startActivity(intent);

        }
    });

    return recyclerView;
}

EDIT: with more looking I have found that when I tap on a card, the onClick in the onbindviewholder is not being hit. 编辑:更多的看起来我发现,当我点击一张卡片时,onbindviewholder上的onClick没有被击中。

Let's setup the click listener when you create new view holder: 让我们在创建新的视图持有者时设置click侦听器:

public static class ViewHolder extends RecyclerView.ViewHolder{
    CardView cardView;
    ImageView imageView;
    TextView textView;

    public ViewHolder(CardView v){
        super(v);
        cardView = v;
        imageView = (ImageView) cardView.findViewById(R.id.list_icon);
        textView = (TextView) cardView.findViewById(R.id.card_text);
    }
}

And modify a little bit when binding and creating: 并在绑定和创建时稍微修改一下:

@Override
public  recylcerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    //create a new view
    final CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_main, parent, false);
    cardView.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view){
                if(listener != null){
                    Log.v("hitsOnClick", "It has been hit");
                    listener.onClick((int)cardView.getTag());

                }
            }
        });
    return new ViewHolder(cardView);
}

@Override
public void onBindViewHolder(ViewHolder holder, final int position){
    //set the values inside the given view

    Drawable drawable = holder.cardView.getResources().getDrawable(imageIds[position]);
    holder.imageView.setImageDrawable(drawable);
    holder.imageView.setContentDescription(nameArray[position]);
    holder.textView.setText(nameArray[position]);

    holder.cardView.setTag(position);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM