我正在尝试实现一个布局,它基本上是相同大小的项目网格。
这些项目是有序的,上面有日期,就像日历一样,所以你可以知道为什么我不能在每次滚动时对它们进行随机排序。
我的问题是:有没有办法防止这种行为,或者我应该坚持使用旧的 GridLayout?
我问这个也是因为我最初认为新的 RecyclerView 仅用于随机排序的项目,例如新闻文章或帖子。这可以解释控制其行为的困难。
但是,经过一些阅读和网络搜索后,现在在我看来,如果我错了,请纠正我,RecyclerView 是 ListView、GridLayout 和其他少数由其 LayoutManager 实现的升级版本。
有人可以帮我解决这个问题吗?
谢谢!
编辑:这是我的适配器:
public class CardAssenzeAdapter extends RecyclerView.Adapter<CardAssenzeAdapter.AssenzeViewHolder> {
private List<Assenza> list;
Context c;
public CardAssenzeAdapter(Context c, List<Assenza> list) {
this.c = c;
this.list=list;
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public void onBindViewHolder(AssenzeViewHolder NewsViewHolder, int i) {
Assenza n = list.get(i);
AssenzeViewHolder.month.setText(n.getMeseS());
AssenzeViewHolder.day.setText(n.getGiornoS());
if (n.isRitardo()) AssenzeViewHolder.hour.setText(n.getTipoR());
}
@Override
public AssenzeViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.
from(viewGroup.getContext()).
inflate(R.layout.card, viewGroup, false);
return new AssenzeViewHolder(itemView);
}
public static class AssenzeViewHolder extends RecyclerView.ViewHolder {
protected static TextView month;
protected static TextView day;
protected static TextView hour;
public AssenzeViewHolder(View v) {
super(v);
month = (TextView) v.findViewById(R.id.meseA);
day = (TextView) v.findViewById(R.id.giornoA);
hour = (TextView) v.findViewById(R.id.oraR);
}
}
}
最佳答案
RecyclerView 与随机排序的元素无关。其目的更像是更有效地使用资源。这是 Android 开发者页面的引用,
"The RecyclerView widget is a more advanced and flexible version of ListView. This widget is a container for displaying large data sets that can be scrolled very efficiently by maintaining a limited number of views. Use the RecyclerView widget when you have data collections whose elements change at runtime based on user action or network events."
关于项目的顺序,这完全取决于您提供给 RecyclerView 的数据集。因此,如果您的数据集没有按日期等排序,那么您需要做的就是对数据集进行排序,然后将它们附加到 RecyclerView。
和HERE你可以看看它的实现。
关于android - 如何防止RecyclerView移动项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29109526/