У меня есть горизонтальный RecyclerView. Каждый ребенок содержит TextView и вертикальный RecyclerView. Вертикальные дочерние элементы RecyclerView содержат только TextView.Вертикальный RecyclerView внутри горизонтали RecyclerView отставание при прокрутке
Вертикальный свиток очень плавный, но горизонтальная прокрутка сильно отстает. Я попытался использовать swapAdapter в onBindViewHolder вместо setAdapter, но это не решило проблему. Я также попытался изменить набор данных и вызвать notifyDataSetChanged(), но это тоже не помогло.
Редактировать
Я только что узнал, что скроллинг на самом деле гладко в ландшафтном режиме.
Горизонтальные RecyclerView.Adapter
private SparseArray<GroupArrayAdapter> adapters;
private ArrayList<Category> categories;
private Activity context;
public CategoryArrayAdapter(Context context, ArrayList<Category> categories) {
this.categories = categories;
this.context = (Activity)context;
adapters = new SparseArray<GroupArrayAdapter>();
for (int i = 0; i < categories.size(); i++) {
adapters.append(i, new GroupArrayAdapter(context, categories.get(i).getGroups()));
}
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView name;
public RecyclerView list;
public ViewHolder(View view) {
super(view);
name = (TextView) view.findViewById(R.id.lblCategoryName);
list = (RecyclerView) view.findViewById(R.id.lstGroups);
list.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
list.addItemDecoration(new GroupItemDecoration((int)context.getResources().getDimension(R.dimen.gap)));
//list.setAdapter(new GroupArrayAdapter(context, new ArrayList<Group>()));
}
}
@Override
public int getItemCount() {
return categories.size();
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
Category category = categories.get(position);
viewHolder.name.setText(category.getName());
viewHolder.list.swapAdapter(adapters.get(position), false);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_category, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
Вертикальный RecyclerView.Adapter
private ArrayList<Group> groups;
public GroupArrayAdapter(Context context, ArrayList<Group> groups) {
this.groups = groups;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView name;
public ViewHolder(View view) {
super(view);
name = (TextView) view.findViewById(R.id.lblGroupName);
}
}
@Override
public int getItemCount() {
return groups.size();
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
Group group = groups.get(position);
viewHolder.name.setText(group.getName());
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = null;
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_group_text, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
Просьба представить информацию о том, как и почему это фиксирует ФОС проблема –
Не работает, никаких других идей? – Millerntor
Это привело к тому, что мое отставание от горизонтального переустройства прошло. –