2016-12-18 6 views
0

次のアドレスにあるrealm recyclerview:realmrecyclerviewにはloadmore機能があり、60 realmオブジェクトを作成してクエリ領域を作成し、クエリの結果をrecyclerviewのアダプター。 recyclerviewをスクロールしてonloadmore listenerをloadmore関数で起動する別の非同期メソッドget get moreオブジェクトを作成し、領域に保存した後、recyclerviewは新しいオブジェクトを表示します。 このloadmore機能を使用して大きなデータセットのクエリをページングする必要があります。私はonloadmore関数でクエリを実行しようとしましたが、アダプタは新しいクエリ結果で再コンパイルしませんでした。しかし、私はアダプタを再作成し、recyclerviewに設定すると動作していました。ここレルムから100レコードごとにフェッチして表示した後にloadmoreを実行する方法

+1

を拡張するローカル・データベースからの読み取り時に任意の「loadmore」機能を必要といけない:あなたが必要なのは、そのアダプタですhttps://github.com/realm/realm-android-adapters/blob/master/adapters/src/main/java/io/realm/RealmRecyclerViewAdapter.java – pskink

+0

のようなオンデマンドでデータをロードする必要はありません。その要素は遅延評価されているため、RealmResultsを使用します。 'RealmRecyclerViewAdapter'を使用してください。 – EpicPandaForce

+0

RealmRecyclerViewとRealmRecyclerViewAdapterを使用して、Api 17でGalaxy S4-miniに4〜5秒かかった50kレコードを照会して表示しました。RealmResultsをクエリして取得するのは瞬間ですが、recyclerviewにデータを読み込むには時間がかかります。私は好きではないデータをロードする前に、UIスレッドがブロックされることがあります。データをロードする前にprogressdialogeを使用しました。正しい軌道にいるのですか? – mobweb

答えて

0

は抽象RealmBasedRecyclerViewAdapterクラスを拡張し、私のrealmrecyclerviewです: `パブリッククラスQuoteRecyclerViewAdapterはRealmBasedRecyclerViewAdapter {

public QuoteRecyclerViewAdapter(
      Context context, 
      RealmResults<QuoteModel> realmResults, 
      boolean automaticUpdate, 
      boolean animateIdType, 
      String animateExtraColumnName) { 
     super(context, realmResults, automaticUpdate, animateIdType, animateExtraColumnName); 
    } 

    public class ViewHolder extends RealmViewHolder { 

     public FrameLayout container; 

     public TextView quoteTextView; 

     public TextView footerTextView; 

     public ViewHolder(FrameLayout container) { 
      super(container); 
      this.container = container; 
      this.quoteTextView = (TextView) container.findViewById(R.id.quote_text_view); 
      this.footerTextView = (TextView) container.findViewById(R.id.footer_text_view); 
     } 
    } 

    @Override 
    public ViewHolder onCreateRealmViewHolder(ViewGroup viewGroup, int viewType) { 
     View v = inflater.inflate(R.layout.item_view, viewGroup, false); 
     return new ViewHolder((FrameLayout) v); 
    } 

    @Override 
    public void onBindRealmViewHolder(ViewHolder viewHolder, int position) { 
     final QuoteModel quoteModel = realmResults.get(position); 
     viewHolder.quoteTextView.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         if (!quoteModel.isValid()) { 
          return; 
         } 
         asyncRemoveQuote(quoteModel.getId()); 
        } 
       } 
     ); 
     viewHolder.quoteTextView.setOnLongClickListener(
       new View.OnLongClickListener() { 
        @Override 
        public boolean onLongClick(View v) { 
         asyncUpdateQuote(quoteModel.getId()); 
         return true; 
        } 
       } 
     ); 
     if (type != null && type.equals("Grid")) { 
      viewHolder.container.setBackgroundColor(
        colors.get((int) (quoteModel.getId() % colors.size()))); 
     } 
     viewHolder.quoteTextView.setText(quoteModel.getQuote()); 
    } 

    @Override 
    public void onBindFooterViewHolder(ViewHolder holder, int position) { 
     holder.footerTextView.setText("I'm a footer"); 
    } 

    @Override 
    public ViewHolder onCreateFooterViewHolder(ViewGroup viewGroup) { 
     View v = inflater.inflate(R.layout.footer_view, viewGroup, false); 
     return new ViewHolder((FrameLayout) v); 
    } 
}` 
関連する問題