我在数组列表中有一个json数组,我需要将一个对象显示为count,将一个对象显示为文本视图,而要过滤该对象时,我无法找到count视图和显示视图,我在搜索哈希图,但是不起作用,我的问题是我可以在一个recyclerview适配器中添加两个数组列表,一个用于视图,一个用于在同一视图中计数。 编辑:经过研究后,我知道如果ID与ID匹配,我需要隐藏对象,但是在recyclerview中,我找不到根据条件显示和隐藏内容的解决方案?
@Override
public void onBindViewHolder(@NonNull DiscussingAdapter.DiscussionView holder, int position) {
HashMap<String, List<Result>> hashMap = new HashMap<String, List<Result>>();
Result result = discussionsList.get(position);
//discussionsList.get(position);
List<Result> filterList = discussionsList.stream()
.filter(p -> p.getParentCommentID()==null).collect(Collectors.toList());
Log.d("filterList",filterList.toString());
for (int counter = 0; counter < filterList.size(); counter++) {
holder.tvHeader.setText(filterList.get(counter).getTitle());
holder.tvDetail.setText(Utils.html2text(filterList.get(counter).getComment()));
holder.tvViewReply.setText("Reply");
holder.tvUser.setText("By " + filterList.get(counter).getAuthor().getTitle());
String DateofReceipt = filterList.get(counter).getCreated();
String date = DateofReceipt.split("T", 0)[0];
String date_before = date;
String date_after = Utils.date(date_before);
holder.tvDate.setText(date_after);
}
Map<String, Integer> commentsCountMap = new HashMap<>();
for(Result res : discussionsList) {
String parentCommentId = res.getParentCommentID();
// If the Result has a parent comment
if(parentCommentId != null) {
// get the count for this parent comment (default to 0)
int nbCommentsForParent = commentsCountMap.getOrDefault(parentCommentId, 0);
// increment the count
nbCommentsForParent++;
// Update the Map with the new count
commentsCountMap.put(parentCommentId, nbCommentsForParent);
}
}
for(Map.Entry<String,Integer> cCount : commentsCountMap.entrySet()){
holder.tvViewReply.setText(String .valueOf(cCount.getValue())+" Reply");
}}
生成的Json对象如下
{
"d": {
"results": [
{
"__metadata": {
"id": "e7433825-6771-4f5e-96c7-c4d2674d7764",
"uri": "",
"etag": "\"2\"",
"type": "SP.Data.InquiryDiscussionsListListItem"
},
"Author": {
"__metadata": {
"id": "f064775c-6161-4bdb-9f4d-8bc6a898d218",
"type": "SP.Data.UserInfoItem"
},
"Title": "Submitter1"
},
"Id": 1501,
"ID": 1501,
"Title": null,
"Created": "2019-06-06T04:15:17Z",
"ParentCommentID": "1439",
"Comment": "<div class=\"ExternalClass8C333A77B6564A53BED74CA1BA2D2A10\">
reply add for 009</div>",
"CommentType": null,
"CommentDocumentName": null,
"AppID": "1083",
"Role": "Customer"
},
{
"__metadata": {
"id": "e92f708f-93dc-4587-8c4f-5518ed24f360",
"uri": "",
"etag": "\"2\"",
"type": "SP.Data.InquiryDiscussionsListListItem"
},
"Author": {
"__metadata": {
"id": "209d2d9a-bb07-4064-aaa0-231ad881a80f",
"type": "SP.Data.UserInfoItem"
},
"Title": "Submitter1"
},
"Id": 1500,
"ID": 1500,
"Title": null,
"Created": "2019-06-06T04:14:55Z",
"ParentCommentID": "1439",
"Comment": "<div class=\"ExternalClass44B1A0BB4D314C57BEE20141BFF10491\">comment add for 009</div>",
"CommentType": null,
"CommentDocumentName": null,
"AppID": "1083",
"Role": "Customer"
},
{
"__metadata": {
"id": "ec112002-3132-4bc1-8f85-03fbd9fda11d",
"uri": "",
"etag": "\"2\"",
"type": "SP.Data.InquiryDiscussionsListListItem"
},
"Author": {
"__metadata": {
"id": "6e8ecb1d-4deb-4168-a8b4-a725abf8002a",
"type": "SP.Data.UserInfoItem"
},
"Title": "Sarada Devi Potti"
},
"Id": 1439,
"ID": 1439,
"Title": "Canceled",
"Created": "2019-06-03T09:32:34Z",
"ParentCommentID": null,
"Comment": "<div class=\"ExternalClass5E1BFEDC348C43719AD940E644E0E0B6\">sdaeadfasdf</div>",
"CommentType": "Public",
"CommentDocumentName": null,
"AppID": "1083",
"Role": "Budget Analyst"
}
]
}
}
在“以上Json响应”中,如果object为Comment,我想显示内容,但如果是回复,则需要基于id匹配任何解决方案来显示计数?
答案 0 :(得分:2)
您可以通过简单的方法先将两个列表都传递给适配器 然后返回总大小
@Override
public int getItemCount() {
return mList.size() + mList1.size();
}
例如,现在onBindViewHolder
现在要先显示mList
@Override
public void onBindViewHolder(@NonNull DiscussingAdapter.DiscussionView holder, int position) {
if(position < mList.size()){
// Load the data from mList
holder.tvName.setText(mList.get(position).getName())
}else{
//For getting Data from secondList
holder.tvName.setText(mList1.get(position-mList.getSize()).getName())
// Now you will get data from second List
}
}
答案 1 :(得分:0)
我不确定我是否完全了解您。但是,我认为您可以创建一个模型类,并在其中保留两个变量。
public class Demo {
private int count;
private int value;
public Demo(int count, int value) {
this.count = count;
this.value = value;
}
}
然后,您可以创建该模型类的ArrayList
并将其传递给RecyclerView
适配器。
ArrayList<Demo> demos = new ArrayList<>();
Demo firstObject = new Demo(1, 10);
demos.add(firstObject);
Demo secondObject = new Demo(2, 11);
demos.add(secondObject);
Demo thirdObject = new Demo(3, 12);
demos.add(thirdObject);
请随时询问我是否不清楚或其他任何内容。