是否有任何簡單的方法可以讓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