Group Recyclerview来自Json的物品

时间:2016-05-03 10:27:40

标签: android json android-recyclerview

我从服务器获取Json输出。

这是我的Json看起来像

{
  "feed": [
    {
      "order_no": "70000004",
      "quotation_no": "abc004a"
    },
    {
      "order_no": "70000003",
      "quotation_no": "abc003a"
    },
    {
      "order_no": "70000001",
      "quotation_no": "abc001a"
    },
    {
      "order_no": "70000001",
      "quotation_no": "abc001b"
    }
  ]
}

我知道如何在recyclerview中填充它。但我想要的是使用 order_no 对这个json进行分组并填充。例如,有两个 70000001 。所以我只需要显示一个 70000001 订单号。

这是我的自定义行.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:background="@color/white">

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="2dp"
        android:layout_marginLeft="3dp"
        android:layout_marginRight="3dp"
        android:layout_marginTop="2dp"
        android:background="@color/white">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#dbdbda"
            android:orientation="vertical">

            <TextView
                android:id="@+id/parent_list_item"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="16dp"
                android:paddingRight="16dp"
                android:paddingTop="10dp"
                android:text="Parent Title"
                android:textColor="@color/primaryColorText"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/parent_q_item_one"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="16dp"
                android:paddingRight="16dp"
                android:paddingTop="2dp"
                android:text="Q Title"
                android:textColor="@color/secondaryColorText"
                android:textSize="12sp" />

            <TextView
                android:id="@+id/parent_q_item_two"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="16dp"
                android:paddingRight="16dp"
                android:paddingTop="2dp"
                android:text="Q Title"
                android:textColor="@color/secondaryColorText"
                android:textSize="12sp" />

        </LinearLayout>

    </android.support.v7.widget.CardView>

</RelativeLayout>

分组后,我只需要在 parent_list_item (70000001)中只显示一个 order_no ,然后我需要显示一个第一个文字视图中为quotation_no ,第二个文字视图中的第二个 quotation_no 位于同一 order_no

我的适配器类

public class OrderQuatationHistory extends RecyclerView.Adapter<OrderQuatationHistory.ItemViewHolder> {

    private LayoutInflater layoutInflater;
    private ArrayList<OrderHistoryData> orderHistoryDataArrayList;

    public OrderQuatationHistory() {
    }

    public OrderQuatationHistory(Context context) {
        orderHistoryDataArrayList = new ArrayList<>();
        layoutInflater = LayoutInflater.from(context);
    }

    public void setOrderHistoryList(ArrayList<OrderHistoryData> orderHistoryDataArrayList) {
        this.orderHistoryDataArrayList = orderHistoryDataArrayList;
        notifyItemRangeChanged(0, orderHistoryDataArrayList.size());
    }

    @Override
    public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = layoutInflater.inflate(R.layout.custom_order_history_p_row, parent, false);
        ItemViewHolder itemViewHolder = new ItemViewHolder(view);
        return itemViewHolder;
    }

    @Override
    public void onBindViewHolder(ItemViewHolder holder, int position) {
        OrderHistoryData orderHistoryData = orderHistoryDataArrayList.get(position);
            holder.orderNo.setText(orderHistoryData.getOrderNo());
            holder.quotationNo.setText(orderHistoryData.getQuotationNo());
    }

    @Override
    public int getItemCount() {
        return orderHistoryDataArrayList.size();
    }

    public static class ItemViewHolder extends RecyclerView.ViewHolder {
        private TextView orderNo,quotationNo;

        public ItemViewHolder(View itemView) {
            super(itemView);
            orderNo = (TextView) itemView.findViewById(R.id.parent_list_item);
            quotationNo = (TextView) itemView.findViewById(R.id.parent_q_list);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

试试这个...为避免重复值,您可以使用此方法。

ArrayList<Integer> jSonOrder=new ArrayList();

int order_no =您从JSon检索的指定值。

   if (!jSonOrder.contains(order_no)) {
     jSonOrder.add(order_no);
   }