4

I have created a RecyclerView.Adapter and I want to fill a list.. so my problem now is I don't know how to implement the get position of my list.

below you can see my code:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { List<Result> _contents; public RecyclerViewAdapter(List<Result> contents) { this._contents = contents; } @Override public int getItemCount() { return _contents.size(); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int position) { View view = null; view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item_card_small, parent, false); Result tempResult = _contents.get(position); TextView temp = (TextView) view.findViewById(R.id.text_city_name); temp.setText(tempResult.getInfo().getCity().getName()); return new RecyclerView.ViewHolder(view) { }; } @Override public long getItemId(int position) { return position; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { } } 

so the function onCreateViewHolder doesn't get properly the id is always the same id.. how can I fix this or implement to get the right position of mi list?¿ What it´s happening now is the list has the right number of items but is always the same item, the fist one. I guess it´s something simple but I cant figure out how to implement it.

Thanks!!

4
  • 2
    So you changed viewType to position and expected it to now hold a position? Commented Aug 3, 2015 at 23:12
  • Well the position is always the same but it's because I dont know how to implement it. _contents is my list of items so.. How can I get the position there to fill the proper item in my view? Do u know what I mean? @karaokyo Commented Aug 3, 2015 at 23:14
  • The method signature is: onCreateViewHolder(ViewGroup parent, int viewType). onCreateViewHolder will not have a position. You are suppose to populate the view in onBindViewHolder. Please check the tutorial and report back if you have any problems: developer.android.com/training/material/lists-cards.html. Commented Aug 3, 2015 at 23:20
  • possible duplicate of RecyclerView android: Getting an item at a particular position Commented Aug 4, 2015 at 14:34

3 Answers 3

4

I have fixed the issue implementing my own ViewHolder, I was a little bit confused. Below is the code working properly.

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { List<Result> _contents; public RecyclerViewAdapter(List<Result> contents) { this._contents = contents; } @Override public int getItemCount() { return _contents.size(); } @Override public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = null; view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item_card_small, parent, false); return new RecyclerViewAdapter.ViewHolder(view); } @Override public long getItemId(int position) { return position; } @Override public void onBindViewHolder(ViewHolder holder, int position) { Result tempResult = _contents.get(position); holder.mTextView.setText(tempResult.getInfo().getCity().getName()); } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(View v) { super(v); mTextView = (TextView) v.findViewById(R.id.text_city_name); } } } 
Sign up to request clarification or add additional context in comments.

1 Comment

What are you confused about?
3

I'm not sure why you need the position of your list. You can get the position in onBindViewHolder. However, you can put any data you inside ViewHolder and use them later on.

public class RecyclerViewAdapter extends RecyclerView.Adapter<ResultViewHolder> { List<Result> _contents; public RecyclerViewAdapter(List<Result> contents) { this._contents = contents; } public Result getItem(int position) { return _contents != null ? _contents.get(position) : null; } @Override public int getItemCount() { return _contents.size(); } @Override public long getItemId(int position) { return position; } @Override public ResultViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item_card_small, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(ResultViewHolder holder, int position;) { Result result = getItem(position); holder.position = position; holder.result = result; holder.cityName.setText(result.getInfo().getCity().getName()); } public static class ResultViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { int position = -1; Result result; TextView cityName; public ResultViewHolder(View view) { super(view); cityName = (TextView) view.findViewById(R.id.text_city_name); view.setOnClickListener(this); } public void onClick(View v) { // do whatever you want with list posisiton and result... } } } 

Comments

2

onBindViewHolder method recieves position as second argument. you can manipulate your view in this method.

package com.virgooll.avaa.shop.views; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.virgooll.avaa.R; import com.virgooll.avaa.detailedIndex.model.StoreItem; import java.util.List; public class MasonryAdapter extends RecyclerView.Adapter<MasonryAdapter.StoreItemViewHolder> { List<StoreItem> items; int itemsIndex; public MasonryAdapter(List<StoreItem> items) { this.items = items; } @Override public int getItemCount() { return items.size(); } @Override public MasonryAdapter.StoreItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { itemsIndex = i; View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.detailed_index_list_item, viewGroup, false); MasonryAdapter.StoreItemViewHolder pvh = new MasonryAdapter.StoreItemViewHolder(v); return pvh; } @Override public void onBindViewHolder(MasonryAdapter.StoreItemViewHolder holder, int position) { holder.setImage(position); } @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); } public class StoreItemViewHolder extends RecyclerView.ViewHolder { StoreItemViewHolder(View itemView) { super(itemView); } public void setImage(int position) { ImageView image = (ImageView) itemView.findViewById(R.id.detailed_index_fragment_inner_list_view_image); image.setImageResource(items.get(position).photoId); } } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.