At first I assigned clickListener in OnBindViewHolder and it was working just fine but as many here on stackoverflow advised that it is not a good practice and it is better if I handle all my click listener logic in ViewHolder. Now in OBVH I used holder's position to get current item' position but in VH I didn't even use any position or getAdapterPosition and still I am getting correct item position.
ViewHolder:
private class NewsHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ImageView mImageView;
private TextView mTextView;
private Results mResults;
private NewsHolder(View itemView) {
super(itemView);
mImageView = itemView.findViewById(R.id.news_image);
mTextView = itemView.findViewById(R.id.news_headlines);
itemView.setOnClickListener(this);
}
public void bind(Results results){
mResults = results;
mTextView.setText(mResults.getWebTitle());
String picture = mResults.getFields().getThumbnail();
if (!picture.isEmpty()) {
Picasso.get()
.load(picture)
.placeholder(R.drawable.display)
.resize(200, 200)
.into(mImageView);
} else {
Picasso.get()
.load(R.drawable.display)
.resize(200, 200)
.into(mImageView);
}
}
@Override
public void onClick(View view){
String itemWebUrl = mResults.getWebUrl();
Uri currentItemUri = Uri.parse(itemWebUrl);
Intent websiteIntent = new Intent(Intent.ACTION_VIEW, currentItemUri);
view.getContext().startActivity(websiteIntent);
}
}
OnBindViewHolder
@Override
public void onBindViewHolder(@NonNull NewsHolder holder, int position) {
try {
Results results = mResults.get(position);
holder.bind(results);
} catch (Throwable throwable) {
Log.d(TAG, " " + throwable);
}
}
Results model class:
public class Results{
@SerializedName("id")
@Expose
public String id;
@SerializedName("sectionId")
@Expose
private String sectionId;
@SerializedName("webTitle")
@Expose
private String webTitle;
@SerializedName("webUrl")
@Expose
private String webUrl;
@SerializedName("fields")
@Expose
private Fields fields;
public String getId(){
return id;
}
public String getSectionId(){
return sectionId;
}
public String getWebTitle(){
return webTitle;
}
public String getWebUrl(){
return webUrl;
}
public Fields getFields(){
return fields;
}
}
Is it possible to get correct item position without getAdapterPosition()?