【问题标题】:LinearLayoutManager - repetition in a circleLinearLayoutManager - 循环重复
【发布时间】:2017-07-30 23:06:59
【问题描述】:

有没有什么简单的方法可以让LinearLayoutManager变成一个圆圈(圆圈里的重复项)?

我调查了一下,发现只有一种方法可以制作自己的自定义 LayoutManager,所以找到一种代码更少的方法会很酷

【问题讨论】:

  • 您是说您有一些固定数量的项目,并且您希望您的RecyclerView 在每次用户到达列表末尾时简单地重复它们?例如您有“A”、“B”和“C”,并且希望用户永远看到“ABCABCABCABC...”?
  • 是的,总是重复

标签: android android-layout android-recyclerview recyclerview-layout linearlayoutmanager


【解决方案1】:

首先要做的是将适配器的getItemCount() 方法更改为返回Integer.MAX_VALUE。这实际上不是无限的,但它超过了 20 亿,所以我怀疑有人会滚动那么远。

接下来,每当您从数据源检索项目时,不要只使用position。相反,请使用 position % dataSource.size()... 这将在用户滚动时重复您的项目。

这是一个例子:

public class MainActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recycler = (RecyclerView) findViewById(R.id.recycler);
        recycler.setAdapter(new MyAdapter());
    }

    private static class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {

        private final List<String> items;

        private MyAdapter() {
            items = new ArrayList<>();
            items.add("A");
            items.add("B");
            items.add("C");
            items.add("D");
        }

        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            View itemView = inflater.inflate(R.layout.itemview, parent, false);
            return new MyViewHolder(itemView);
        }

        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            String item = items.get(position % items.size());
            ((TextView) holder.itemView).setText(item);
        }

        @Override
        public int getItemCount() {
            return Integer.MAX_VALUE;
        }
    }


    private static class MyViewHolder extends RecyclerView.ViewHolder {

        public MyViewHolder(View itemView) {
            super(itemView);
        }
    }
}

【讨论】:

  • 嗯,可以,但我更喜欢在 LayoutManager 中有这个逻辑,以便有更清晰的代码
猜你喜欢
  • 2015-06-12
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多