String数据转list类型

需求

在页面编辑数据的时候增加附件和新增字段的需求 意思就是 用户自己可以编辑字段名称和内容 可以有或没有 也可以有多个 所以就得使用适配器 传入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!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值