是否有任何简单的方法可以让LinearLayoutManager变成一个圆形(循环中的重复项)?LinearLayoutManager - 循环中的重复
我调查了一下,发现只有使自己的自定义布局管理方式,所以它会很酷找到一种方法,用更少的代码
是否有任何简单的方法可以让LinearLayoutManager变成一个圆形(循环中的重复项)?LinearLayoutManager - 循环中的重复
我调查了一下,发现只有使自己的自定义布局管理方式,所以它会很酷找到一种方法,用更少的代码
首先要做的就是改变你的适配器的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);
}
}
}
hmm,这有效,但我更喜欢在LayoutManager中拥有这个逻辑,以获得更清晰的代码 – Tim
你是说你有一个项目的一些固定的号码,你希望你的'RecyclerView'到每个用户获取到结束时间只是重复他们名单?例如你有“A”,“B”和“C”,你希望用户永远看到“ABCABCABCABC ...”吗? –
是的,总是重复 – Tim