RecyclerView onClick可以从活动中获取多个按钮和处理 [英] RecyclerView onClick for multiple buttons and handling from Activity

查看:107
本文介绍了RecyclerView onClick可以从活动中获取多个按钮和处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将RecyclerViewCardView一起使用,并且CardView内部有2个按钮.现在,通过ViewHolder静态类实现View.OnClickListener并覆盖事件(它的工作方式),如

I'm using RecyclerView with CardView and inside the CardView have 2 buttons. Now, have implemented the onClick events by implementing View.OnClickListener by the ViewHolder static class and overriding the event (its working )like

    @Override
    public void onClick(View v) {

        if (v.getId() == mClassBtn.getId()){

        }
        else if (v.getId() == mDaysBtn.getId()){

        }
     }

正在寻找解决方案/模式来处理Activity类中的Click,例如

Looking for a solution/pattern to handle the Click in the Activity class like

adapter = new ItemsListAdapter(getActivity(), data, new CustomItemClickListener() { 

    @override
    public void onItemClick(View v, int position) {

       Log.d(TAG, "clicked position:" + position);
       // which button clicked and separate action for each button
    } 
});
// CustomItemClickListener -- interface in the adapter class which holds the click event .

上面的代码可以正常工作,并且可以登录Clicks,但不能区分单击了哪个按钮.

The above code working fine and able to log the Clicks but not able to differentiate which button has clicked.

感谢任何帮助

推荐答案

这是实现该目标的最佳方法:-

here is the best way to achieve that:--

这就是我的实现方式

public class FollowersDetailsAdapter extends RecyclerView.Adapter<FollowersDetailsAdapter.MyViewHolder> {

    private List<GetUserFollowDetailsResponseData> followersList;
    Context context;
    public FollowersDetailsAdapterListener onClickListener;


    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView rv_tv_follower_name, rv_tv_follower_desig;
        public CircleImageView rv_iv_follower_image;
        RelativeLayout rv_rel_layout_followers, rel_layout_followers;
        LikeButton rv_iv_follower_icon;

        public MyViewHolder(View view) {
            super(view);
            rv_rel_layout_followers = (RelativeLayout) view.findViewById(R.id.rv_rel_layout_followers);
            rel_layout_followers = (RelativeLayout) view.findViewById(R.id.rel_layout_followers);
            rv_iv_follower_image = (CircleImageView) view.findViewById(R.id.rv_iv_follower_image);
            rv_tv_follower_name = (TextView) view.findViewById(R.id.rv_tv_follower_name);
            rv_tv_follower_desig = (TextView) view.findViewById(R.id.rv_tv_follower_desig);
            rv_iv_follower_icon = (LikeButton) view.findViewById(R.id.rv_iv_follower_icon);
            rel_layout_followers.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onClickListener.iconTextViewOnClick(v, getAdapterPosition());
                }
            });
        }

    }

    public FollowersDetailsAdapter(List<GetUserFollowDetailsResponseData> FollowersList, FollowersDetailsAdapterListener listener) {
        this.followersList = FollowersList;
        this.onClickListener = listener;

    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.followers_list_row, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        if (followersList.get(position).getImage() != null && !followersList.get(position).getImage().trim().equalsIgnoreCase("")) {
            Picasso.with(context)

                    .load(followersList.get(position).getImage())
                    .resize(200, 200).into(holder.rv_iv_follower_image);
        }

        holder.rv_tv_follower_name.setText(followersList.get(position).getName());
        holder.rv_tv_follower_desig.setText(followersList.get(position).getDescription());
        if (followersList.get(holder.getAdapterPosition()).getID() == Integer.parseInt(ApplicationPreference.getUserId())) {
            holder.rv_iv_follower_icon.setVisibility(View.GONE);
        } else {
            holder.rv_iv_follower_icon.setVisibility(View.VISIBLE);
            if (followersList.get(position).getIsFollowing() == 0) {
                holder.rv_iv_follower_icon.setLiked(false);
            } else if (followersList.get(position).getIsFollowing() == 1) {
                holder.rv_iv_follower_icon.setLiked(true);
            }


        }
        holder.rv_iv_follower_icon.setOnLikeListener(new OnLikeListener() {
            @Override
            public void liked(LikeButton likeButton) {

                onClickListener.iconImageViewOnClick(likeButton, position);
            }

            @Override
            public void unLiked(LikeButton likeButton) {
                onClickListener.iconImageUnFollowOnClick(likeButton, position);
            }
        });

    }

    public interface FollowersDetailsAdapterListener {

        void iconTextViewOnClick(View v, int position);

        void iconImageViewOnClick(View v, int position);

        void iconImageUnFollowOnClick(View v, int position);
    }

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

以及在您初始化适配器的活动中

and in your activity where you initialize the adapter--

 followersDetailsAdapter = new FollowersDetailsAdapter(followersList, new FollowersDetailsAdapter.FollowersDetailsAdapterListener() {
            @Override
            public void iconTextViewOnClick(View v, int position) {
                gotoUserProfile(followersList.get(position).getID());

            }

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

                followUserProfile(followersList.get(position).getID(),1);
            }

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

                followUserProfile(followersList.get(position).getID(),0);
            }
        }); 

这篇关于RecyclerView onClick可以从活动中获取多个按钮和处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆