Android中Adapter的notifyDataSetInvalidated()和notifyDataSetChanged()的区别

notifyDataSetChanged方法通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容。

public void notifyDataSetChanged ()

该方法内部实现了在每个观察者上面调用onChanged事件。每当发现数据集有改变的情况,或者读取到数据的新状态时,就会调用此方法。

public void notifyDataSetInvalidated ()

该方法内部实现了在每个观察者上面调用onInvalidated事件。每当发现数据集监控有改变的情况,比如该数据集不再有效,就会调用此方法。

今天用到Listview刷新功能,之前解决都是给Listview重新负上adapter这样listview就滚动到第一条了,但是这样会有些耗内存,程序写法也不美观。理论上是这样的,需要实验一下,重要的是一下两句话!
notifyDataSetInvalidated(),会重绘控件(还原到初始状态)选项会跳转到第一项
notifyDataSetChanged(),重绘当前可见区域,停留在当前选项

项目中不需要每次都刷新,所以采用notifyDataSetChanged()

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){
        systemSettingListView.setSelection(position);
        Fragment fragment = null; 
        if (position == NET_SEETING) { 
            fragment = new SystemSettingNetContentFragment();;
        } else if (position == ACCOUNT_SETTING) { 
            fragment = new SystemSettingAccountContentFragment();
        } else if (position == AUDIO_SETTING) { 
            fragment = new SystemSettingAudioContentFragment();
        } else if (position == VIDEO_SETTING) { 
            fragment = new SystemSettingVideoContentFragment();
        } else if (position == NET_UPDATE) { 
            fragment = new SystemSettingUpdateContentFragment();
        } else if (position == STATUS_FIND) { 
            fragment = new SystemSettingStatusContentFragment();

        } 
        adapter.setSelectItem(position);
        adapter.notifyDataSetChanged();
        getFragmentManager().beginTransaction()
        .replace(R.id.system_setting_right_fragment, fragment).commit(); 

    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值