recyclerview textview单击获取post_id? [英] recyclerview textview click get post_id?

查看:107
本文介绍了recyclerview textview单击获取post_id?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个这样的回收站视图:

I have a recyclerview like this:

Name
image
Publisher
post_id textview with ID value hidden
Like unlike(invisible)

Name
image
Publisher
post_id textview with ID value hidden
Like unlike(invivible)
...

当某人单击like时,它将变为不可见,而与众不同的textview将可见.

When someone click in like, it will become invisible and the unlike textview will be visible.

问题是,我需要将帖子ID值传递给该用户想要的.PHP.

The problem is, I need to pass the post id value to .PHP that this user want to like.

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

//Imageloader to load image
private ImageLoader imageLoader;
private final Context context;

//List to store all posts
List<Posts> Posts;

//Constructor of this class
public CardAdapter(List<Posts> Post, Context context){
    super();
    //Getting all
    this.Posts = Post;
    this.context = context;
}

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

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

    //Getting the particular item from the list
    Posts post =  Posts.get(position);

    //Loading image from url
    imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();

    //Showing data on the views
    holder.imageView.setImageUrl(post.getImageUrl(), imageLoader);
    holder.textViewName.setText(post.getName());
    holder.textViewPublisher.setText(post.getPublisher());
    holder.textViewID.setText(post.getPid());
    holder.setIsRecyclable(false);

}

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

class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    //Views
    public NetworkImageView imageView;
    public TextView textViewName;
    public TextView textViewPublisher;
    public TextView textViewID;

    //Initializing Views
    public ViewHolder(View itemView) {
        super(itemView);
        imageView = (NetworkImageView) itemView.findViewById(R.id.imageViewHero);
        textViewName = (TextView) itemView.findViewById(R.id.textViewName);
        textViewPublisher = (TextView) itemView.findViewById(R.id.textViewPublisher);
        textViewID = (TextView) itemView.findViewById(R.id.textViewID);
        textViewName.setClickable(true);
        textViewName.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        //
    }

}
}

因此,我有很多喜欢和不同的地方,有许多post_id值...如何在用户单击LIKE的同一张卡片视图中获取ID值?

So I have many likes and unlikes, many post_id values... how can I get the ID value in the same cardview that user has clicked in LIKE?

推荐答案

您必须使用回调设计模式.

You have to use callback design pattern.

创建界面

public interface OnItemClickListener {
        //view on which user clicked and the post_id for which you want to 
        //some specific action
        void onItemClick(View itemView, int post_id);
    }

现在创建如下所示的适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    // ...

    /***** Creating OnItemClickListener *****/

    // Define listener member variable
    private OnItemClickListener listener;

    // Define the method that allows the parent activity or fragment to define the listener
    public void setOnItemClickListener(OnItemClickListener listener) {
        this.listener = listener;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView tvName;
        public TextView tvHometown;

        public ViewHolder(final View itemView) {
            super(itemView);
            this.tvName = (TextView) itemView.findViewById(R.id.tvName);
            this.tvHometown = (TextView) itemView.findViewById(R.id.tvHometown);
            // Setup the click listener
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // Triggers click upwards to the adapter on click
                    if (listener != null) {
                        int position = getAdapterPosition();
                        if (position != RecyclerView.NO_POSITION) {
                            // Assuming positionList contains list of post id's
                            int post_id = positionList.get(position);
                            listener.onItemClick(itemView, post_id);
                        }
                    }
                }
            });
        }
    }

    // ...
}

根据活动或片段设置适配器

Set Adapter from activity or fragment

MyAdapter adapter = .....;
adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
    @Override
    public void onItemClick(View view, int post_id) {
        Toast.makeText(MyActivity.this, post_id + " was clicked!", Toast.LENGTH_SHORT).show();
    }
});

这篇关于recyclerview textview单击获取post_id?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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