Я пытаюсь раздуть два разных макета в одном просмотре ресайклеров. Вот мой код адаптера.Android раздувает два макета в адаптере просмотра recycler
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<myHome> homeData;
private static final int TYPE_FEATURED = 1;
private static final int TYPE_OTHER = 2;
public HomeAdapter(ArrayList<myHome> myDataset) {
this.homeData = myDataset;
}
public class FeaturedViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public TextView author;
public FeaturedViewHolder(View itemView) {
super(itemView);
this.title = (TextView)itemView.findViewById(R.id.title);
this.author = (TextView)itemView.findViewById(R.id.recvid_auth);
}
}
public class otherVidViewHolder extends RecyclerView.ViewHolder {
public TextView rec_title;
public TextView rec_author;
public otherVidViewHolder(View itemView) {
super(itemView);
this.rec_title = (TextView)itemView.findViewById(R.id.recvid_title);
this.rec_author = (TextView)itemView.findViewById(R.id.description);
}
}
@Override
public int getItemViewType(int position) {
// Just as an example, return 0 or 2 depending on position
// Note that unlike in ListView adapters, types don't have to be contiguous
return (position == 0? TYPE_FEATURED : TYPE_OTHER);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
RecyclerView.ViewHolder viewHolder;
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
switch (viewType) {
case TYPE_FEATURED :
View v1 = inflater.inflate(R.layout.layout_home_view, viewGroup, false);
viewHolder = new FeaturedViewHolder(v1);
//return new FeaturedViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_home_view, viewGroup, false));
break;
case TYPE_OTHER :
View v2 = inflater.inflate(R.layout.layout_home_other, viewGroup, false);
viewHolder = new otherVidViewHolder(v2);
//return new otherVidViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_home_other, viewGroup, false));
break;
default: return null;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
if(viewHolder.getItemViewType() == TYPE_FEATURED) {
FeaturedViewHolder featuredViewHolder = (FeaturedViewHolder) viewHolder;
featuredViewHolder.title.setText(homeData.get(i).getTitle());
featuredViewHolder.author.setText(homeData.get(i).getUser());
} else {
otherVidViewHolder otherViewHolder = (otherVidViewHolder) viewHolder;
otherViewHolder.rec_title.setText(homeData.get(i).getViews());
}
}
@Override
public int getItemCount() {
return homeData.size();
}
Код работает нормально, но только показывает один макет, другой макет, который является layout_home_other, не отображается. Можно ли показать два макета? у двух макетов также есть разные данные для показа. как я буду перенастраивать размер второго макета в getItemCount()? спасибо за всю помощь, которую я получу.
вот набор данных. общественного класса MYHOME {
String title;
String user;
String views;
String url;
String duration;
public myHome(String title, String user, String views, String url, String duration) {
this.title = title;
this.user = user;
this.views = views;
this.url = url;
this.duration = duration;
}
public String getTitle() {
return title;
}
public String getUser() {
return user;
}
public String getViews() {
return views;
}
public String getUrl() {
return url;
}
public String getDuration() {
return duration;
}
}
Попробуйте добавить корневой макет для обоих макете, а затем надуть его в качестве одного макета –
@akhilRao где же я добавить его? в onCreateViewHolder? и как его добавить? im sorry im новичок в программировании для Android. – kathleen55
Вы пытаетесь раздуть два разных макета одновременно? Или вы пытаетесь раздуть два разных макета в зависимости (по одному за раз) в зависимости от ситуации с данными? – Silmarilos