需求
在页面编辑数据的时候增加附件和新增字段的需求 意思就是 用户自己可以编辑字段名称和内容 可以有或没有 也可以有多个 所以就得使用适配器 传入list类型 比较方便一些
过程
如果后端给的接口的数据直接就是list类型 那就简单多了 就像这个
private ArrayList<OrderEntity> attachJson;//附件
private List<NewEntity> addFileJson;//新增字段
实体类就是json串里的字段 然后
ArrayList<OrderEntity> attachments = Detail.getAttachJson();
if (null != attachments && attachments.size() > 0) {
binding.peopleLay.setVisibility(View.VISIBLE);
binding.rvEnclosureLayout.setVisibility(View.VISIBLE);
initEnclosure(attachments);
} else {
binding.peopleLay.setVisibility(View.GONE);
binding.rvEnclosureLayout.setVisibility(View.GONE);
}
private void initEnclosure(List<OrderEntity> enclosureList) {
enclosureAdapter.setOnItemChildClickListener((adapter, view, position) -> {
if (view.getId() == R.id.tv_annex_download) {//下载
AnnexDownloadPopWindow popWindow = new AnnexDownloadPopWindow(DetailActivity.this);
popWindow.setData(enclosureList.get(position));
popWindow.showDownPopwindow( binding.rvEnclosure, true);
popWindow.backgroundAlpha(0.5f);
} else if (view.getId() == R.id.tv_annex_preview) {//预览
ImagesPreviewDialog.newInstance(enclosureList.get(position).getUrl()).show(DetailActivity.this);
}
});
enclosureAdapter.setNewData(enclosureList);
}
这个就很清楚了 list有数据的时候控件显示 没有就隐藏 initEnclosure方法就是传数据到适配器 list数据大体就结束了 接下来就是string 转list了
private String newCustomField;
像这种的就
//新增自定义字段
private List<SingleItemEntity> customFieldsList;
省略{
customFieldsList=new ArrayList<>();
customFieldsList=getCustomFieldsList(entity);
NewCustomFieldAdapter newCustomFieldAdapter = new NewCustomFieldAdapter(customFieldsList);
mBinding.ple.tvNumfile.setLayoutManager(new LinearLayoutManager(this));
mBinding.ple.tvNumfile.setAdapter(newCustomFieldAdapter);
}
private List<SingleItemEntity> getCustomFieldsList(HotelDetailEntity mOrderEntity) {
customFieldsList.clear();
if(!TextUtils.isEmpty(mOrderEntity.getNewCustomField())){
List<NewFieldEntity> applyOtherFieldsStr = GsonManager.getInstance().getGson().fromJson(
mOrderEntity.getNewCustomField(),
new TypeToken<List<NewFieldEntity>>() {
}.getType());
if(applyOtherFieldsStr!=null&&applyOtherFieldsStr.size()>0){
mBinding.ple.tvNumfile.setVisibility(View.VISIBLE);
for(int i=0;i<applyOtherFieldsStr.size();i++){
customFieldsList.add(new SingleItemEntity(SingleItemConstant.TYPE_SIX,applyOtherFieldsStr.get(i).getName(),applyOtherFieldsStr.get(i).getValue()));
}
}
}
return customFieldsList;
}
基本逻辑就是 创建一个集合 写一个返回值是集合的方法赋值给这个集合 传参就是实体类 也可以直接传具体字段 给布局设置适配器 方法中 先清空集合中的数据 避免重复 判断数据是否为空 设置布局显示或隐藏 重点来了
利用GsonManager new TypeToken将数据转成集合 然后for循环给集合添加数据;
OK!!