2017-07-07 49 views
-2

我有一個數組,其中包含值如{座位1,座位1,座位1,座位2,座位2,座位3,座位4,座位4,座位4}。即圖像的左側 我需要根據它的座位值進行分組,即。形象的右側。 enter image description here問題由於getAdapterPosition

對於給定的環境座椅列表陣列將是:{"1", "-1", "-1", "2", "-1", "3", "4", "-1", "-1"} 目前我使用recyclerview並用以下條件檢查此:

if(seat_list.get(holder.getAdapterPosition()).equals("-1")) 
    { 
     Log.d("aaa", "if :" + seat_list.get(holder.getAdapterPosition())); 
    } 
    else 
    { 
     Log.d("aaa", "else :" + seat_list.get(holder.getAdapterPosition())); 
     holder.ll_header.setVisibility(View.VISIBLE); 
     holder.tv_seat_num.setText(seat_list.get(holder.getAdapterPosition())); 
    } 

利用上述代碼列表得到銷燬滾動recyclerview。 我已經排序,但我想給普通頁眉或前往所有訂單與同座

+0

顯示,你可以看看[這個庫(https://開頭github上。 com/Karumi/HeaderRecyclerView) – kId

+0

@Kaushik我不想將標題添加到回收站視圖中...將有特定項目的標題。請參閱圖像的右側。 – kiturk3

+0

列表大嗎?多大? –

回答

-2

您可以按使用Collections.sort方法

+0

我已經排序,但我想給共同的標題或標題與所有訂單相同的座位 – kiturk3

0

首先,我不認爲你的數據已經能夠顯示。所以準備它會更好。 最好有一些類型的數據模型,其中包含有關座位和訂單的信息。 OOP,你知道嗎? 爲了保持簡單的例子,我準備和映射活動內的數據,但它不是真正的世界項目的好主意。 所以,從你的描述中,我們有一些數組,其中的項目可以被複制,並且它們在數組中的位置 - 它是orderId。所以,換句話說,我們希望有一些關鍵值對的分組結構,其中鍵 - >座位號,值 - >訂單ID集合。但是,有一個班級會代表這種關係,並且有關於上述事情的信息會更好。

對於這樣的數據,將它們顯示在recyclerView中將不是很大的問題。

在開始時,我想在這裏放置幾個方法,但是在我意識到它可能會被混淆而沒有完整的代碼列表。 所以,在這裏你去所有的東西。 這是你將下面的代碼上市會得到什麼結果:

enter image description here

= = = = =時間看到一些代碼= = = = =

活動 - >(與僅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> 
+0

@VladymyrRtmnko:賞金只是爲了努力:)...我會接受爲正確的,一旦我實現此代碼正確:) – kiturk3