LinearLayoutManagerを円(円の繰り返しアイテム)にする簡単な方法はありますか?LinearLayoutManager - 円内での繰り返し
私はそれがより少ないコードで方法を見つけるためにクールになるそうするために
LinearLayoutManagerを円(円の繰り返しアイテム)にする簡単な方法はありますか?LinearLayoutManager - 円内での繰り返し
私はそれがより少ないコードで方法を見つけるためにクールになるそうするために
まず最初はInteger.MAX_VALUE
を返すために、あなたのアダプタのgetItemCount()
方法を変更され、それを調査し、独自のカスタムのLayoutManagerを作るための唯一の方法を発見しました。これは実際にはではありませんが、それは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