I have a RecyclerView
with an adapter. In the adapter I fill my views with a list. But in my adapter I inflate two different views. Here is some code:
@Override
public int getItemViewType(int position) {
switch (position) {
case 0:
return TYPE_HEADER;
default:
return TYPE_LIST_ITEM;
}
}
@Override
public DataObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = null;
switch (viewType) {
//region User-Data like ProfilePic & Abonnenten
case TYPE_HEADER: {
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.profile_besties_placeholder, parent, false);
return new DataObjectHolder(view) {
};
}
case TYPE_LIST_ITEM: {
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.profile_besties_list_item, parent, false);
return new DataObjectHolder(view) {
};
}
}
return null;
}
and now, I try to set data to the views. I have 20 items in my list and I set the position as text for my views. I can see in my RecyclerView
that it starts by 1 but it must start by 0. Here is my onBind
:
@Override
public void onBindViewHolder(final DataObjectHolder holder, int position) {
switch (position) {
case TYPE_HEADER:
break;
default:
int newPostion = position -1;
bestiesItem = contents.get(position);
holder.progressBarBesties.setVisibility(View.VISIBLE);
//region set data to views
holder.textViewUsername.setText(bestiesItem.getStrUsername());
holder.textViewSubscribers.setText(bestiesItem.getStrAbos() + " Abos" + position);
Glide.with(context)
.load(bestiesItem.getStrImageName())
.thumbnail(0.1f)
.error(R.drawable.error_image)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.fitCenter()
.into(new GlideDrawableImageViewTarget(holder.imageViewProfilePic) {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> animation) {
super.onResourceReady(resource, animation);
//check isRefreshing
holder.progressBarBesties.setVisibility(View.GONE);
holder.imageViewProfilePic.setImageDrawable(resource);
}
});
//endregion
break;
}
}
I tried something like newPosition
to subtract the position with 1 but it doesn't work. There are only 19 items but I add 20 to the list. The problem is the first view.. oh I forgot this:
static final int TYPE_HEADER = 0;
static final int TYPE_LIST_ITEM = 1;
That the one view is only inflated by position 0. Because of that the list starts to count at position one so the first item is missing.
How can I get all items?