ちょっと突き当たりましたが、それを解決する方法が不思議で、私には鶏と卵のように見えます。データベース内の情報に基づいて、RecyclerViewに異なるビュータイプを表示しますか?
私はその中の場所に関する情報を持つデータベースを持っています。距離で注文されたすべての場所を私のRecyclerView
に表示したい。
viewType
が1つのみの場合は、すでにこれを達成しました。しかし、これは私が理解できないことです、私はユーザーとの一定の距離内にある場所のために別のビューを表示する必要があります。したがって、例えば100メートル以内。
その情報はデータベース内にあるため、getItemViewType(int position)
がsetAdapter()で呼び出されたときに、CursorLoader
はすべての情報を引き出すことができませんでした。したがって、NULLポインタ例外が発生します。私の質問に
:
は私CursorLoader
は、[完了私のアダプタで動作し、ヌルCursor
を持たないようにするために私は待つために方法はありますか?ローダーが終了した後に.setAdapter()
に電話をかけようとすると、No adapter attached; skipping layout
RecyclerView
にアクティビティーの作成時にアダプターを設定する必要があるため、ログに次のようなメッセージが表示されます。
マイgetItemViewType(position)
は現在、次のようになります。
if (!cursor.isClosed()) {
cursor.moveToPosition(position);
}
if (cursor.getInt(2) <= 100) {
return TYPE_NEARBY;
} else {
return TYPE_NOT_NEARBY;
}
基本的に私はviewType
を決定し、そのセルのための別のビューをロードするために、私のCursorLoader
内のデータを使用する必要があります。 1つのViewTypeでは、距離を確認する必要がないため、すべて同じビューです。
ご協力いただきありがとうございます!
'getItemCount'が' 0'を返す場合、 'getItemViewType'は呼び出されません。これは、カーソルがnullの場合に当てはまります。 – Blackbelt
ちょうどブレークポイントでそれを走らせて、あなたが正しいです。私はonBindViewHolderが呼び出されたときにそのIDを更新することによってそれを動作させました。カーソルを位置に移動し、もう一度チェックしてビューホールダーを更新します。私は、ビューアホルダーにホルダーIDを使用していて、更新する必要があるからだと思います。 –