Recyclerview with Section但每个部分只有一个页脚

时间:2016-07-13 12:39:56

标签: java android android-recyclerview

美好的一天,

我有一个Recyclerview,在第一次加载时达到了我想要的结果,即该卖家将特定卖家销售的所有交易分组。

示例:

  • 鲍勃卖手表。
  • 鲍勃卖车。
  • 鲍勃卖马。
  • 按钮删除所有BOB交易

  • 吉姆卖房子。

  • 吉姆卖猴子。
  • 按钮删除所有吉姆交易

ECT

示例:

enter image description here

问题是,当我开始滚动recyclerview时,项目行就会混淆。

我这样做的方式是,我有一个布局,在LinearLayout下面有一个带有绿色按钮的垂直线性布局。

现在我以编程方式为每一行的视图充气,然后设置该行的数据。

A Row

这是我的onBindViewHolder:

      @Override
  public void onBindViewHolder(final ParentCartResultsViewHolder holder, int position) {

    final LinkedHashMap<Long, List<Trade>> mapTradesBySeller = CartUtils.getUserToFixedPriceTradeMap();
    mTradesBySeller = (new ArrayList<>(mapTradesBySeller.values())).get(holder.getAdapterPosition());

    if (mTradesBySeller != null) {
      for (Trade trade : mTradesBySeller) {
        View singleTrade = LayoutInflater.from(MyApplication.getAppContext()).inflate(R.layout.item_trade_details_include_row, holder.mLinearLayout, false);
        TextView tradeTitle = (TextView) singleTrade.findViewById(R.id.trade_details_include_trade_title);
        tradeTitle.setText(trade.getTitle());
        TextView endDate = (TextView) singleTrade.findViewById(R.id.trade_details_include_trade_ending_time);
        endDate.setText(trade.getUserAlias() + " : " + trade.getUserId());
        holder.mLinearLayout.addView(singleTrade);
      }
    }
  }

我的onCreateViewHolder:

      @Override
  public ParentCartResultsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cart_grouped_by_seller, parent, false);
    return new ParentCartResultsViewHolder(v);
  }

现在我想我知道问题是什么,只是我无法弄清楚如何解决它。

问题是创建视图并将它们添加到LinearLayout是在onBindViewHolder中,因为它运行了很多次

1 个答案:

答案 0 :(得分:1)

您可以使用库SectionedRecyclerViewAdapter轻松将数据分组到各个部分,并为每个部分添加页脚。

首先创建一个Section类:

class TradeSection extends StatelessSection {

    List<String> list;

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

        // remove header
        this.setHasHeader(false);

        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 getFooterViewHolder(View view) {
        return new MyFooterViewHolder(view);
    }

    @Override
    public void onBindFooterViewHolder(RecyclerView.ViewHolder holder) {
        MyFooterViewHolder footerHolder = (MyFooterViewHolder) holder;

        // bind your footer view here
        footerHolder.tvItem.setText(title);
    }
}

然后使用您的章节设置RecyclerView:

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

// Create your sections with the list of data for each year
TradeSection section1 = new TradeSection(bobDataList);
TradeSection section2 = new TradeSection(jimDataList);

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

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