2017-07-26 37 views
0

我有給10每頁結果在一次如何獲取來自API的數據並顯示,當用戶滾動

{ item1, 
    item2, 
    item3, 
    . 
    . 
    item10 
} 

我有RecycleView中,我要顯示的結果的API。

public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.ViewHolder> { 
    private Entry[] entry; 

    // Provide a reference to the views for each data item 
    // Complex data items may need more than one view per item, and 
    // you provide access to all the views for a data item in a view holder 
    public static class ViewHolder extends RecyclerView.ViewHolder { 
     // each data item is just a string in this case 
     TextView labelText; 
     TextView descText; 
     ImageView itemImage; 

     public ViewHolder(View v) { 
      super(v); 
      labelText = (TextView) v.findViewById(R.id.item_label); 
      descText = (TextView) v.findViewById(R.id.item_text); 
      itemImage = (ImageView) v.findViewById(R.id.item_image); 
     } 

    } 

    // Provide a suitable constructor (depends on the kind of dataset) 
    public RecycleAdapter(Entry[] en) { 
     entry = en; 
    } 

    // Create new views (invoked by the layout manager) 
    @Override 
    public RecycleAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
                int viewType) { 
     // create a new view 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.list_items, parent, false); 
     // set the view's size, margins, paddings and layout parameters 

     ViewHolder vh = new ViewHolder(view); 
     return vh; 
    } 

    // Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     // - get element from your dataset at this position 
     // - replace the contents of the view with that element 
     holder.labelText.setText(entry[position].title); 
     holder.itemImage.setImageResource(R.drawable.img); 
     holder.descText.setText("Random Text to Recycle"); 

    } 

    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     return entry.length; 
    } 
} 

條目對象包含數組if if包含數據的對象(基本上是String)。而不是這個,我想通過和整數數組 表示API的,比我想列出該頁面的所有10個項目的頁面

在我看來,這我們可以在同一時間中得到的只有一個項目綁定功能或其他方式是將插入條目中的所有項目並取回它們(我想避免)。

回答

0

假設你的API一次給你X個項目。當調用getView調用位置lastFetchedItem-Y(其中Y是用於緩衝網絡延遲的小數字)時,請求下一個X項目。當你收到它們時,你更新支持你的適配器的模型並調用notifyDataSetChanged。這會給你一個平滑的滾動。調整X和Y以提高網絡效率(較慢的網絡或較慢的API,較大的Y)。

+0

你能給我一個鏈接代碼的一些想法? –

0

使用Endless Scrolling with AdapterViews and RecyclerView

tutorial會幫你做paging功能。

0

可以使用recyclerView的addOnScrollListener行爲監控滾動,並使用layoutManager.findLastCompletelyVisibleItemPosition()知道誰是最後item.When你知道它,你可以填充你之前和更好的用戶體驗,您可以獲取已經在未來10個項目使用adapter.notifyItemRangeInserted(int startPosition, int itemCount)從下面通知列表該郵件,以便例如,如果您在提取之前在recyclerView中有10個項目,則在取回之後,您將從上一項目(通過上述layoutManager方法)通知itemCount added(in你的情況10),然後顯示的前10個將仍然顯示,下一個10將被添加到回收站的底部,用戶將能夠'繼續'滾動。

希望它有幫助,祝你好運

相關問題