2017-01-04 5 views
3

私はrecyclerviewと一緒にカーソルを使用しています。Recylerview、間にヘッダビューを持つCursorAdapter

私は照会カーソルオブジェクト(ローダーから渡された)とヘッダーStrings []の配列を持っています。

String headers[] = {"apples", "bananas"...}; 

今、私は私がgetItemCount()メソッドを微調整する必要はありません

Apples 
cursor row 1 
cursor row 2 
cursor row 3 
Bananas 
cursor row 4 
cursor row 5 

などの項目を表示したいです。したがって、適切な長さの単一のカーソルを渡すように計画します。

可能な方法の1つは、MatrixCursorとMergeCursorを使用してダミー行を追加することです(Adding rows into Cursor manually)。 これは問題ありませんが、MergeCursorはヘッダーとカーソルデータを順番に揃えます。

正しいヘッダーとアイテムの位置で最終的なカーソルを実現する方法を模索することを望んでいました。

答えて

3

ライブラリーSectionedRecyclerViewAdapterを使用して、データをセクションにグループ化し、各セクションにヘッダーを追加することができます。あなたにあなたのCursorを変換する方法で作業する必要があります上記の例を

// Create an instance of SectionedRecyclerViewAdapter 
SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); 

// Add your Sections to the adapter 
sectionAdapter.addSection(new MySection(headers[0], applesList)); 
sectionAdapter.addSection(new MySection(headers[1], bananasList)); 

// Set up your RecyclerView with the SectionedRecyclerViewAdapter 
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
recyclerView.setAdapter(sectionAdapter); 

:あなたのセクションでRecyclerViewを設定すると

class MySection extends StatelessSection { 

    String title; 
    List<String> list; 

    public MySection(String title, List<String> list) { 
     // call constructor with layout resources for this Section header, footer and items 
     super(R.layout.section_header, R.layout.section_item); 

     this.title = title; 
     this.list = list; 
    } 

    @Override 
    public int getContentItemsTotal() { 
     return list.size(); // number of items of this section 
    } 

    @Override 
    public RecyclerView.ViewHolder getItemViewHolder(View view) { 
     // return a custom instance of ViewHolder for the items of this section 
     return new MyItemViewHolder(view); 
    } 

    @Override 
    public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) { 
     MyItemViewHolder itemHolder = (MyItemViewHolder) holder; 

     // bind your view here 
     itemHolder.title.setText(list.get(position)); 
    } 

    @Override 
    public RecyclerView.ViewHolder getHeaderViewHolder(View view) { 
     return new SimpleHeaderViewHolder(view); 
    } 

    @Override 
    public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) { 
     MyHeaderViewHolder headerHolder = (MyHeaderViewHolder) holder; 

     // bind your header view here 
     headerHolder.tvItem.setText(title); 
    } 
} 

第一部クラスを作成しますList<String>List<String>の代わりにCursorを受け取るようMySectionクラスを変更することができます。

+0

anyoenには、独自の変換を行うことなく、ヘッダービューでCursorAdapterを使用する方法の解決策がありますか? – dazza5000

関連する問題