2017-02-26 93 views
0

我有這樣一個recyclerview:recyclerview textview click get post_id?

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) 
... 

當有人點擊喜歡,它會成爲無形和不同的TextView將是可見的。

問題是,我需要將post ID值傳遞給該用戶想要的.PHP。

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) { 
     // 
    } 

} 
} 

所以我有很多喜歡和unlikes,許多POST_ID值...我怎樣才能在同一cardview的ID值用戶已經點擊了什麼樣的?

回答

1

你必須使用回調設計模式。

創建界面

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

    // ... 
} 

設置適配器適配器

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(); 
    } 
}); 
+0

謝謝,我會試試! –

+1

歡迎,如果它幫助你,那麼請接受它作爲答案。當然是 – Passiondroid

+0

!你介意在我真正的適配器中給我一個例子嗎?我剛剛使用我的完整適配器代碼編輯了我的問題...我有一些問題需要知道在哪裏以及如何添加此代碼...再次感謝您,朋友! –

1

你可以做,在onBindViewHolder()如下

@Override 
public void onBindViewHolder(final ViewHolder holder, final int position) { 
    holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      holder.getAdapterPosition(); //use this as index to get item in adapter list 
     } 
    }); 
} 
+0

感謝您的回答!你能給我更多的細節,我怎麼能稱之爲onBindViewHolder?我怎麼用這個? –

+1

'onBindViewHolder()'方法應該在您使用上面的'ViewHolder'類的適配器類中實現。請參閱https://developer.android.com/training/material/lists-cards.html – arjun