Adapter.notifyDataSetChanged()无法更新的问题

在从后台获取JSON数据解析后,放到全局的allList中,然后调用adapter.notifyDataSetChanged()方法,发现数据并没有更新.

原因为: 当用JSON解析出list时,如果直接赋值给全局allList,会直接产生一个新的list给allList,adapter会判定不是原有的对象,无法实现更新.

关于JSON解析数组的源码,这里使用的是fastjson中parseArray方法

public static <T> List<T> parseArray(String text, Class<T> clazz) {
        if (text == null) {
            return null;
        }

        List<T> list;

        DefaultJSONParser parser = new DefaultJSONParser(text, ParserConfig.getGlobalInstance());
        JSONLexer lexer = parser.lexer;
        int token = lexer.token();
        if (token == JSONToken.NULL) {
            lexer.nextToken();
            list = null;
        } else if (token == JSONToken.EOF && lexer.isBlankInput()) {
            list = null;
        } else {
            list = new ArrayList<T>();
            parser.parseArray(clazz, list);

            parser.handleResovleTask(list);
        }

        parser.close();

        return list;
    }

这里很明显又new了一个list出来.

所以在解析时可以这样写.

List<Other> listMain = JSON.parseArray(data,Other.class);
allList.clear();
allList.addAll(listMain);
adapter.notifyDataSetChanged();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值