gpt4 book ai didi

java - 按字段过滤自定义 POJO 的 ListView

转载 作者:行者123 更新时间:2023-11-30 01:57:59 25 4
gpt4 key购买 nike

我有一个 POJO:

public class RoomData implements Parcelable {
private String objectId, name, building, floor, imageUrl;
private boolean hasPc, hasProjector, hasTelepresence, hasWhiteboard;
private boolean dataReady = false;
private ArrayList<MeetingData> meetingData = new ArrayList<MeetingData>();
private int capacity;
private ArrayList<BeaconData> beacons = new ArrayList<BeaconData>();
private DateTime nextAvailableStart, nextAvailableEnd;
private boolean availableNow = false;
private ArrayList<Interval> meetingDuringIntervals = new ArrayList<Interval>();
}

填充到自定义 ListView/ListAdapter 中。

我想知道如何根据 POJO 的字段过滤该列表。例如,如果我构造一个 RoomFilter 对象,它声明我的 capacity 整数应该高于 X。我该如何实现它?我只能通过 primitive 数据类型找到指向 filtering 的链接...

这是我的自定义 Adapter 类:

public class BeaconAdapter extends BaseAdapter {
private Context context;
private ArrayList<BLEDeviceAdvertisement> beaconArrayList = new ArrayList<BLEDeviceAdvertisement>();

private static LayoutInflater inflater = null;

//BeaconAdapter for the custom ListView
public BeaconAdapter(Context context, ArrayList<BLEDeviceAdvertisement> beaconArrayList) {
this.beaconArrayList = beaconArrayList;
this.context = context;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
return beaconArrayList.size();
}

@Override
public BLEDeviceAdvertisement getItem(int position) {
return beaconArrayList.get(position);
}


@Override
public long getItemId(int position) {
return position;
}

//Custom getview for the custom layout beacon_row_item.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View myCustomView = convertView;

if (myCustomView == null)
myCustomView = inflater.inflate(R.layout.beacon_row_item, null);

return myCustomView;
}

}

最佳答案

在 OP 的要求下,我将我的评论作为答案发布以供将来引用,并提供更多详细信息。以下是一些可能的解决方案:

  1. 破坏性更新:遍历列表,过滤掉不需要的内容。基于这个列表实现适配器。

  2. 虚拟 View :在原始列表上实现“虚拟 View ”的逻辑。此处您只保留原始列表,但在所有 适配器的方法中您将跳过与过滤器不匹配的项目。例如,在 getItem(int pos) 中,您循环遍历列表并保留一个计数器,但仅当项目与过滤器匹配时才递增它:当计数器等于 pos 时,您返回该项目。其他方法类似。

  3. 具体 View :使用额外的列表来保持原始列表的“ View ”,以便缓存在 2 中完成的计算。设置/更新过滤器时,通过原始列表的循环构建“view”,然后基于“view”实现适配器。时间效率更高,但也消耗更多内存。

关于java - 按字段过滤自定义 POJO 的 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31927687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com