[英]Android RecyclerView with Multiple View Types and ItemTouchHelper
I'm trying to get ItemTouchHelper to work with a RecyclerView that has multiple view types.我试图让 ItemTouchHelper 与具有多种视图类型的 RecyclerView 一起工作。 I've seen a few answers that say that in order to get this to work the recyclerView adapter has to have setHasStableIds(true) and overrider getItemId(int position) -making sure your items have stable ids.
我看到一些答案说,为了让它工作,recyclerView 适配器必须具有 setHasStableIds(true) 和覆盖程序 getItemId(int position) - 确保您的项目具有稳定的 ID。 However, I can not seem to get this to work, and cannot seem to find any actual examples of an implementation.
但是,我似乎无法让它发挥作用,而且似乎无法找到任何实际的实施示例。
Can anyone provide or point to a working example of using ItemTouchHelper with multiple view types?谁能提供或指出将 ItemTouchHelper 与多种视图类型一起使用的工作示例?
public class NewsAdapter extends RecyclerView.Adapter {公共 class NewsAdapter 扩展 RecyclerView.Adapter {
private static final String TAG = NewsAdapter.class.getSimpleName();
private ArrayList<Article> articles = new ArrayList<>();
public void setList(ArrayList<Article> articles) {
this.articles = articles;
notifyDataSetChanged();
}
setList设置列表
private static final String TAG = NewsAdapter.class.getSimpleName();
private ArrayList<Article> articles = new ArrayList<>();
public void setList(ArrayList<Article> articles) {
this.articles = articles;
notifyDataSetChanged();
}
onCreateViewHolder onCreateViewHolder
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view;
// Here types are: 0=item news image, 1=item news horizontal, 2=Card
if (viewType == 0) {
view = layoutInflater.inflate(R.layout.item_news_image, parent, false);
return new ImageViewHolder(view);
} else {
view = layoutInflater.inflate(R.layout.item_news_horizontal, parent, false);
return new HorizontalViewHolder(view);
}
}
onBindViewHolder onBindViewHolder
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (position == 0) {
// bind viewHolder 'item news image'
ImageViewHolder imageViewHolder = (ImageViewHolder) holder;
Glide.with(imageViewHolder.itemView.getContext()).load(articles.get(position).getUrlToImage()).into(imageViewHolder.urlToImageView);
imageViewHolder.publishedAtTextView.setText(articles.get(position).getPublishedAt());
imageViewHolder.authorTextView.setText(articles.get(position).getAuthor());
imageViewHolder.titleTextView.setText(articles.get(position).getTitle());
} else {
// bind viewHolder 'horizontal'
HorizontalViewHolder horizontalViewHolder = (HorizontalViewHolder) holder;
Glide.with(horizontalViewHolder.itemView.getContext()).load(articles.get(position).getUrlToImage()).into(horizontalViewHolder.urlToImageView);
horizontalViewHolder.publishedAtTextView.setText(articles.get(position).getPublishedAt());
horizontalViewHolder.authorTextView.setText(articles.get(position).getAuthor());
horizontalViewHolder.titleTextView.setText(articles.get(position).getTitle());
}
}
getItemCount获取物品数量
@Override
public int getItemCount() {
return articles.size();
}
getItemViewType获取项目视图类型
@Override
public int getItemViewType(int position) {
if (position == 0) {
return 0;
} else {
return 1;
}
}
ImageViewHolder ImageViewHolder
static class ImageViewHolder extends RecyclerView.ViewHolder {
ImageView urlToImageView;
TextView publishedAtTextView, authorTextView, titleTextView;
public ImageViewHolder(@NonNull View itemView) {
super(itemView);
urlToImageView = itemView.findViewById(R.id.imageINIUrlToImage);
publishedAtTextView = itemView.findViewById(R.id.textINIPublishedAt);
authorTextView = itemView.findViewById(R.id.textINIAuthor);
titleTextView = itemView.findViewById(R.id.textINITitle);
}
}
HorizontalViewHolder HorizontalViewHolder
static class HorizontalViewHolder extends RecyclerView.ViewHolder {
ImageView urlToImageView;
TextView publishedAtTextView, authorTextView, titleTextView;
public HorizontalViewHolder(@NonNull View itemView) {
super(itemView);
urlToImageView = itemView.findViewById(R.id.imageINHUrlToImage);
publishedAtTextView = itemView.findViewById(R.id.textINHPublishedAt);
authorTextView = itemView.findViewById(R.id.textINHAuthor);
titleTextView = itemView.findViewById(R.id.textINHTitle);
}
}
MainActivity主要活动
final NewsAdapter newsAdapter = new NewsAdapter();
binding.recyclerViewTopStories.setAdapter(newsAdapter);
topStoriesViewModel.getList().observe(getViewLifecycleOwner(), newsAdapter::setList);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.