亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在適配器 onBind() 中比較 2 個具有不同元素集的列表?

如何在適配器 onBind() 中比較 2 個具有不同元素集的列表?

RISEBY 2023-04-26 15:06:22
我目前正在使用適配器返回 2 個列表中的項目集,例如:private List<ListResponse.Repo> mListResponseList;private List<MyEvents.Event> mMyEventsList;現在,MyListResponse.Repo 和 MyEvents.Event 給我 json 對象,其中包含第一個事件的完整列表 (ListResponse.Repo) 和第二個事件的一些選擇事件 (MyEvents.Event)在我獲取適配器的項目計數中,我返回 ListResponse.Repo 大小,如下所示: @Override    public int getItemCount() {        if (mListResponseList != null && mListResponseList.size() > 0 ) {            return mListResponseList.size();        } else {            return 1;        }    }請注意:mListResponseList.size() 是所有事件的列表,所以它通常返回列表中的所有事件(比如 6),如果我使用 mMyEventsList.size,它總是小于或等于列表mListResponseList 中的項目實際上是從那里派生的(因為這些是我在另一個端點中檢索的主列表中的特定事件)?,F在,我有一個問題,我試圖只顯示 mMyEventsList 中的事件標題與從 mListResponseList 返回的事件標題相匹配的事件。唯一的問題是因為所有事件返回的列表的大小都大于 mMyEventsList 返回的列表的大小,所以當我嘗試比較它們時,我通常會得到索引越界異常。我嘗試使用以下代碼:if (position < mMyEventsList.size()){if(mMyEventsList.get(position).getEventTitle().equals(repo.getTitle())     {                    cardView.setVisibility(View.VISIBLE);      }}但它沒有返回正確的結果,只顯示一張卡片(而不是 3 張左右,基于匹配的標題)以下硬編碼字符串適用于給定的測試場景(第一個列表有 8 個項目,第二個列表有 4 個,),但它仍然是硬編碼的(如果第二個列表返回超過 4,這將不起作用),我想介紹一下一些動態的東西(也通過確保如果我將具有不同大小的列表與索引越界異常進行比較時應用程序不會崩潰),因為隨著列表項的變化,內容也會發生變化。知道如何使以下比較動態化,因此它返回預期結果,其中它將列表 1 中的項目與列表 2 中的項目進行比較,如果標題匹配,則將該特定元素的 cardview 設置為可見,否則將可見性設置為消失了,如果標題不匹配。這是我目前正在使用的硬編碼代碼,只是想通過引入某種適用于我的情況的循環來使其更具動態性(到目前為止沒有任何運氣)。提前致謝?。╬s:抱歉拖了這么久,只是想解釋一下我基本需要的東西,這是一個動態比較循環,它輸出具有匹配標題的項目的結果(即使列表基于不同數量的元素而具有不同的大小)
查看完整描述

2 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

您將列表 1 中的項目 1 與列表 2 中的項目 1 進行比較。如果第二個列表是第一個列表的派生詞,并且它包含例如項目 1,4 和 6,則項目 2 與項目 2 等進行比較。列表的項目 1 2 是列表 1 的第 1 項,但第 2 項是第 4 項,它們將永遠不會再次匹配。您需要將列表 2 的每個項目與列表 1 的每個項目進行比較。例如


public void onBind(int position) {

            super.onBind(position);

cardView.setVisibility(View.GONE);

for (int i = 0;i<mListResponseList;i++){

if (//Item from List 2 at Position 'Position' equals item on Position i of originallist){

cardView.setVisibility(View.VISIBLE);

break;

}

您基本上遍歷整個列表 1 并檢查是否有任何項目等于您在列表 2 中的項目,如果它們相等,則將 cardview 設置為可見,否則它會按照 onBind 的定義保持 Gone。


修改:


cardView.setVisibility(View.GONE);

            for (int i = 0;i<mMyEventsList.size();i++){

                if (mMyEventsList.get(i).getEventTitle().equals(repo.getTitle()) ) {

                    cardView.setVisibility(View.VISIBLE);

                    break;

                }

            }


查看完整回答
反對 回復 2023-04-26
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

代碼 ArrayList 結果 = new ArrayList<>(); // 循環 arrayList2 項 for (Person person2 : arrayList2) { // 循環 arrayList1 項 boolean found = false; for (Person person1 : arrayList1) { if (person2.id == person1.id) { found = true; } } if (!found) { results.add(person2.id); } }



查看完整回答
反對 回復 2023-04-26
  • 2 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號