首先,我不認爲你的數據已經能夠顯示。所以準備它會更好。 最好有一些類型的數據模型,其中包含有關座位和訂單的信息。 OOP,你知道嗎? 爲了保持簡單的例子,我準備和映射活動內的數據,但它不是真正的世界項目的好主意。 所以,從你的描述中,我們有一些數組,其中的項目可以被複制,並且它們在數組中的位置 - 它是orderId。所以,換句話說,我們希望有一些關鍵值對的分組結構,其中鍵 - >座位號,值 - >訂單ID集合。但是,有一個班級會代表這種關係,並且有關於上述事情的信息會更好。
對於這樣的數據,將它們顯示在recyclerView中將不是很大的問題。
在開始時,我想在這裏放置幾個方法,但是在我意識到它可能會被混淆而沒有完整的代碼列表。 所以,在這裏你去所有的東西。 這是你將下面的代碼上市會得到什麼結果:
= = = = =時間看到一些代碼= = = = =
活動 - >(與僅RecyclerView XML佈局)
public class SeatsActivity extends AppCompatActivity {
RecyclerView recycler;
SeatsAdapter seatsAdapter;
final String[] orders =
{ "seat 1", "seat 1", "seat 1", "seat 2", "seat 2", "seat 3", "seat 4", "seat 4", "seat 4" };
@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seats);
setTitle("Seats example");
recycler = (RecyclerView) findViewById(R.id.recycler);
recycler.setLayoutManager(new LinearLayoutManager(this));
final Map<String, List<Integer>> groupedOrders = groupData(orders);
final List<SeatItem> seats = mapToSeatsItems(groupedOrders);
bindToRecycler(seats);
}
private void bindToRecycler(List<SeatItem> seatItems) {
seatsAdapter = new SeatsAdapter(seatItems);
recycler.setAdapter(seatsAdapter);
}
private Map<String, List<Integer>> groupData(final String[] items) {
final Map<String, List<Integer>> grouped = new LinkedHashMap<>();
for (int i = 0; i < items.length ; i++) {
// I took it from your description. I image that orderId is the place of the seat in array
final Integer orderId = i+1;
final String headerKey = items[i];
if (!grouped.containsKey(headerKey)){
List<Integer> list = new ArrayList<>();
list.add(orderId);
grouped.put(headerKey, list);
} else {
List<Integer> list = grouped.get(headerKey);
list.add(orderId);
}
}
return grouped;
}
private List<SeatItem> mapToSeatsItems(Map<String, List<Integer>> groupOrders) {
final List<SeatItem> list = new ArrayList<>(groupOrders.size());
for (String key : groupOrders.keySet()) {
final SeatItem item = new SeatItem(key, groupOrders.get(key));
list.add(item);
}
return list;
}
}
然後SeatItem,表示數據模型(POJO,豆,無論)
public class SeatItem {
public SeatItem(String header, List<Integer> orderIds) {
this.header = header;
this.orderIds = orderIds;
}
final String header;
final List<Integer> orderIds;
public String getHeader() {
return header;
}
public List<Integer> getOrderIds() {
return orderIds;
}
}
SeatsAdapter - >
public class SeatsAdapter extends
RecyclerView.Adapter<RecyclerView.ViewHolder> {
final List<SeatItem> dataList;
public SeatsAdapter(final List<SeatItem> items){
dataList = items;
}
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup
parent, int viewType) {
final View view =
LayoutInflater.from(parent.getContext()).inflate(R.layout.item_seat, parent,
false);
return new SeatsViewHolder(view);
}
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int
position) {
final SeatsViewHolder seatsViewHolder = (SeatsViewHolder) holder;
final SeatItem item = dataList.get(holder.getAdapterPosition());
final StringBuilder contentBuilder = new StringBuilder();
for (int i = 0; i < item.getOrderIds().size(); i++) {
// here is not production ready, but for just example will be ok
contentBuilder
.append("order Id: ")
.append(item.getOrderIds().get(i));
if (i + 1 != item.getOrderIds().size()){
contentBuilder.append("\n");
}
}
seatsViewHolder.tvHeader.setText(item.getHeader());
seatsViewHolder.tvContent.setText(contentBuilder);
}
@Override public int getItemCount() { return dataList.size(); }
private static class SeatsViewHolder extends RecyclerView.ViewHolder {
final TextView tvHeader;
final TextView tvContent;
SeatsViewHolder(View itemView) {
super(itemView);
tvHeader = (TextView) itemView.findViewById(R.id.tvHeader);
tvContent = (TextView) itemView.findViewById(R.id.tvContent);
}
}
}
,最後一個 - 項目XML,將被回收
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/tvHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="header! "
android:textAppearance="@style/TextAppearance.AppCompat.Title"
android:padding="8dp"
android:background="#cccccc"
/>
<TextView
android:id="@+id/tvContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="content ! ! ! "
android:layout_gravity="top"
android:gravity="top"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:padding="8dp"
/>
</LinearLayout>
顯示,你可以看看[這個庫(https://開頭github上。 com/Karumi/HeaderRecyclerView) – kId
@Kaushik我不想將標題添加到回收站視圖中...將有特定項目的標題。請參閱圖像的右側。 – kiturk3
列表大嗎?多大? –