android - 如何防止RecyclerView移动项目?

标签 android android-recyclerview gridlayoutmanager

我正在尝试实现一个布局,它基本上是相同大小的项目网格。

这些项目是有序的,上面有日期,就像日历一样,所以你可以知道为什么我不能在每次滚动时对它们进行随机排序。

我的问题是:有没有办法防止这种行为,或者我应该坚持使用旧的 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/

相关文章:

android - 以编程方式更改 TextInputLayout 提示颜色

android - 如何在 nestedscrollview 中使用无限滚动的 recyclerview?

java - 如何在适配器类中传递 Intent

android - 如何在 Android 的 recyclerView 中处理多个布局点击

android - 使用 GridLayoutManager 以编程方式滚动 RecyclerView

android - RecyclerView GridLayoutManager item match_parent 宽度

android - DuplicateFileException m4b + 播放服务 9.0

android - ARM 对 Java 程序的多核惩罚

java - RxJava2 : Repeat conditonally/don't repeat in `repeatWhen`

android - 如何实现水平gridlayoutmanager