2016-07-20 19 views
1

私はRecyclerViewを使用して、異なるカテゴリリストを表示しています。各行項目には、カテゴリ項目のリストを表示するRecyclerViewも含まれています。親RecyclerViewには、LinearLayoutManager、子のRecyclerViewsにはGridLayoutManager(2列)が入力されています。子供RecyclerViewsは、多くのカテゴリ項目を持っていても、最初の2を除くすべてのカテゴリ項目を表示していません。残りのすべてのカテゴリ項目は、特定のカテゴリに対して隠れています。言い換えれば、子供RecyclerViewはそれに含まれているものほど拡大していないと言うことができます。RecyclerViewのAndroid RecyclerView?

私はここでは異なる解決策を見つけましたが、誰も働いていませんでした。それが再び投稿する理由です。

+0

あなたが唯一のリサイクルを使用する必要が

enter image description here

まずセクションクラスを作成します。下の画像を参照してください。ビュー。より多くの画像コードに結果を提供し、さらに説明しようとします –

+0

もしあなたが入れ子にされたrecyclerviewを持っていても、何か別の作業をせずにスクロールすることはできません。 –

+1

あなたはRecyclerViewをネストすることができます(これを聞いたら私の心を吹き飛ばしました)...しかし、この問題はコードを共有しなければ解決できません。 – Booger

答えて

1

このlibraryを使用すると、1つの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.tvItem.setText(list.get(position)); 
    } 

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

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

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

はあなたのセクションでRecyclerViewを設定します:

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

// Create your sections with the list of data for each year 
MySection section1 = new MySection("Categories 1", categories1DataList); 
MySection section2 = new MySection("Categories 2", categories2DataList); 

// Add your Sections to the adapter 
sectionAdapter.addSection(section1); 
sectionAdapter.addSection(section2); 

// Set up your RecyclerView with the SectionedRecyclerViewAdapter 
GridLayoutManager glm = new GridLayoutManager(getContext(), 2); 
glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
    @Override 
    public int getSpanSize(int position) { 
     switch(sectionAdapter.getSectionItemViewType(position)) { 
      case SectionedRecyclerViewAdapter.VIEW_TYPE_HEADER: 
       return 2; 
      default: 
       return 1; 
     } 
    } 
}); 
recyclerView.setLayoutManager(glm); 
recyclerView.setAdapter(sectionAdapter); 
+0

私はこのライブラリを使用しました。今度は、このリサイクル・リスト・リストにロードを追加する(サーバーからさらにレコードをロードする)機能を追加したいと考えています。どのようにして円滑にし、改ページを達成できますか? – momersaleem

+0

1)MySectionクラスに "addItem"メソッドを作成して、リストに新しいアイテムを追加します。 2) "addItem"メソッドを使用してセクションに項目を追加します。 3)sectionAdapterのnotifyDataSetChangedを呼び出します。 – Gustavo

+0

私はこれを求めなかった。私はどのように私のリストがスクロールの底に到達したので、私はサーバから次のページレコードを取得するためのAPIを呼び出すことができることを知る必要がありますか?私はリストに新しい項目を追加する方法を知っています。少しでもかすかなので、滑らかにするのを手伝ってください。 – momersaleem