2016-03-18 3 views
1

У меня есть горизонтальный 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; 
} 

ответ

1

Попробуйте использовать этот

reyclerView.setHasFixedSize(true) 
+0

Просьба представить информацию о том, как и почему это фиксирует ФОС проблема –

+0

Не работает, никаких других идей? – Millerntor

+0

Это привело к тому, что мое отставание от горизонтального переустройства прошло. –

Смежные вопросы