0

是否有任何简单的方法可以让LinearLayoutManager变成一个圆形(循环中的重复项)?LinearLayoutManager - 循环中的重复

我调查了一下,发现只有使自己的自定义布局管理方式,所以它会很酷找到一种方法,用更少的代码

+0

你是说你有一个项目的一些固定的号码,你希望你的'RecyclerView'到每个用户获取到结束时间只是重复他们名单?例如你有“A”,“B”和“C”,你希望用户永远看到“ABCABCABCABC ...”吗? –

+0

是的,总是重复 – Tim

回答

0

首先要做的就是改变你的适配器的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); 
     } 
    } 
} 

enter image description here

+0

hmm,这有效,但我更喜欢在LayoutManager中拥有这个逻辑,以获得更清晰的代码 – Tim