如何防止 RecyclerView 移动项目?
How to prevent RecyclerView from moving items?
我正在尝试实现一个布局,该布局基本上是相同大小的项目的网格。
项目是有序的,上面有日期,就像日历一样,所以你可以理解为什么我不能每次滚动时都随机排序。
我的问题是:有没有办法防止这种行为,还是我应该坚持使用旧的 GridLayout?
我问这个也是因为我最初认为新的 RecyclerView 仅用于随机排序的项目,例如新闻文章或帖子。这就解释了控制其行为的困难。
然而,经过一些阅读和网络搜索,现在看来,如果我错了请纠正我,RecyclerView 是 ListView、GridLayout 和其他一些由其 LayoutManagers 实现的升级版本。
有人可以帮我解决这个问题吗?
谢谢!
编辑: 这是我的适配器:
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 你可以看看它的实现。
我正在尝试实现一个布局,该布局基本上是相同大小的项目的网格。
项目是有序的,上面有日期,就像日历一样,所以你可以理解为什么我不能每次滚动时都随机排序。
我的问题是:有没有办法防止这种行为,还是我应该坚持使用旧的 GridLayout?
我问这个也是因为我最初认为新的 RecyclerView 仅用于随机排序的项目,例如新闻文章或帖子。这就解释了控制其行为的困难。
然而,经过一些阅读和网络搜索,现在看来,如果我错了请纠正我,RecyclerView 是 ListView、GridLayout 和其他一些由其 LayoutManagers 实现的升级版本。
有人可以帮我解决这个问题吗?
谢谢!
编辑: 这是我的适配器:
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 你可以看看它的实现。