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