android listview数据跨页面同步

在Android开发中,当用户从ListView点击进入详细页面并进行操作(如增加评论)后,需要将更新后的数据同步回ListView。本文通过实例介绍了如何在详细页面完成操作后,利用广播或setResult方法将数据变更同步到列表项,确保列表显示最新的评论数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用listview展示数据的时候经常会碰到这样的情况,就是点击listview中的一项,然后跳转到详细页面去展示具体的数据,在详细页面我们可以添加评论或者其它的操作,在处理完这些操作之后返回到列表,这时对应的列表项就应该跟着修改评论数,效果如下图:

此时列表数据显示的评论数为21:


点击进入详细页面,此时的评论数字也是21,这个数据是从item项中带过来的,没有从网络去重新获取,当进入后会重新刷新评论,也可以是我们发表评论


3发表评论,发表评论会跳转到发表的页面,在发表文章后回到详细页面,刷新详细页面数据,这个刷新通知可以用广播或者setresult来处理。

更新数据后该页面显示评论数为22

4返回到列表项,数据同步更新到评论数为22,这里触发同步也可以用广播或者setresult来处理。


上面的实现原理参考了四次元轻微博的设计思路。

在列表跳转到详细页面代码:

startActivityForResult(intent, MainTimeLineActivity.REQUEST_CODE_UPDATE_FRIENDS_TIMELINE_COMMENT_REPOST_COUNT);
在详细页面设置主列表更新代码:

 msg.setComments_count(count);
        Intent intent = new Intent();
        intent.putExtra("msg", msg);
        setResult(0, intent);

在主列表捕获结果:返回的结果与adapter中的数据项来比对,先找到原来点击的数据项,然后更新adapter中对应数据项的数据,再更新adapter实现数据刷新。

if (data == null)
            return;
        final MessageBean msg = (MessageBean) data.getParcelableExtra("msg");
        if (msg != null) {
            for (int i = 0; i < getList().getSize(); i++) {
                if (msg.equals(getList().getItem(i))) {
                    MessageBean ori = getList().getItem(i);
                    if (ori.getComments_count() != msg.getComments_count()
                            || ori.getReposts_count() != msg.getReposts_count()) {
                        ori.setReposts_count(msg.getReposts_count());
                        ori.setComments_count(msg.getComments_count());
                        FriendsTimeLineDBTask.asyncUpdateCount(msg.getId(), msg.getComments_count(), msg.getReposts_count());
                        getAdapter().notifyDataSetChanged();
                    }
                    break;
                }
            }

        }

在详细页面捕获新发评论后更新数据:从网络刷新数据

sendCommentCompletedReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (isCommentList)
                    loadNewCommentData();

            }
        };
        LocalBroadcastManager.getInstance(getActivity()).registerReceiver(sendCommentCompletedReceiver,
                new IntentFilter(AppEventAction.buildSendCommentOrReplySuccessfullyAction(msg)));

        sendRepostCompletedReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (!isCommentList)
                    loadNewRepostData();

            }
        };
        LocalBroadcastManager.getInstance(getActivity()).registerReceiver(sendRepostCompletedReceiver,
                new IntentFilter(AppEventAction.buildSendRepostSuccessfullyAction(msg)));

    }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值