我正在尝试创建一个RecyclerView
显示汽车列表以及每个行项目的各种标签。
例如:
宝马
v6,turbo ---> 标签
默克
V8、双涡轮增压、碳纤维 ---> 标签
问题是标签是在响应中检索的,JSON
并且可能是可变数量的。但是,标题始终RecyclerView
只有一个。textView
我当前的代码有一个简单的RecyclerView
地方,我可以在其中显示各种汽车的名称,但是我不确定如何根据响应动态添加固定标题下方的各种标签。
代码:
public class ListItemRecyclerViewAdapter extends RecyclerView.Adapter<ListItemRecyclerViewAdapter.ViewHolder>{
private List<BaseItem> listOfItems = new ArrayList<>();
private final List<TextView> textViewPool = new LinkedList<>();
public ListItemRecyclerViewAdapter(List<BaseItem> listItems){
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fragment_list_item, parent, false);
return new ViewHolder(view);
}
@Override
public int getItemCount() {
return listOfItems.size();
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.carName.setText(((NewsItem)listOfItems.get(position)).getCar());
Categories categories = ((ListItem)listOfItems.get(position)).getCategories();
List<String> categoriesList = categories.getCategories();
holder.bindViewForChips(categoriesList);
}
@Override
public void onViewRecycled(@NonNull NewsViewHolder holder) {
super.onViewRecycled(holder);
holder.recycleTextViews();
}
// Clean all elements of the recycler
private void clear() {
listOfItems.clear();
}
public void addAll(List<BaseItem> list) {
clear();
listOfItems.addAll(list);
notifyDataSetChanged();
}
class ViewHolder extends RecyclerView.ViewHolder{
@BindView(R.id.car)
TextView carName;
private final List<TextView> textViews = new ArrayList<>();
private final ViewGroup container;
ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this,itemView);
container = (ViewGroup) itemView;
}
private void bindViewForChips(List<String> categories){
recycleTextViews();
for (int i = 0; i < categories.size(); i++) {
final TextView textView = getRecycledTextViewOrCreate();
textViewPool.add(textView);
container.addView(textView);
}
}
private TextView getRecycledTextViewOrCreate() {
// if (textViewPool.isEmpty()) {
return (TextView)LayoutInflater.from(container.getContext()).inflate(R.layout.chips_view, container, false);
//}
//return textViewPool.remove(0);
}
public void recycleTextViews() {
textViewPool.addAll(textViews);
textViews.clear();
container.removeAllViews();
}
}
}
任何帮助表示赞赏。谢谢!