ListView GridView 自定义ViewGroup的单个item 刷新 和 单个item中的局部元素刷新

1、概述

之前在操作listView列表的时候一般都是数据源改了然后 adapter.notifyDataSetChanged(); 一次就不管了

且不说效率问题  当有图片的时候,这个闪一下用户体验就不好了。

很多时候需要的不是刷一屏的数据,只要刷指定index的item的内容就可以了,而且在有网络图片的item往往不想刷图片。我用的是imageLoader 刷item 图片位置会闪一下


2、listView gridView的单个item的刷新

参考:http://m.blog.csdn.net/blog/jdsjlzx/44161443

http://blog.csdn.net/wu_shu_jun/article/details/7794576

private void updateSingleRow(ListView listView, long id) {

if (listView != null) {
int start = listView.getFirstVisiblePosition();
for (int i = start, j = listView.getLastVisiblePosition(); i <= j; i++)
if (id == ((Messages) listView.getItemAtPosition(i)).getId()) {
View view = listView.getChildAt(i - start);
getView(i, view, listView);
break;
}
}
}

注:该方法是在自己的adapter 内的方法,前几句是对id是否可见的判断

其中起刷新作用的是:adapter的getView函数

public View getView(int position, View convertView, ViewGroup parent)

3、listView的item里的局部元素刷新

简单的说就是取出上面

View view = listView.getChildAt(i - start);

ViewHolder holder = (ViewHolder) view.getTag();  

然后去对应的设置holder里元素的内容 就达到了 局部更新的效果


4、自定义的ViewGroup 要刷新局部的item

可以结合setTag和findViewWithTag 使用 也可以一个一个找

public final View findViewWithTag(Object tag) {

5、项目中使用

比如focus 在某一项  然后进去做了一些操作,中转了很多界面,在完成时发出一个信号(用eventbus 或者oot 或者广播) 当指定界面收到的时候更新当前的item


GridView ListView中可以这么操作:

View view = resultGridView.getSelectedView();
VideoSearchEntity entity = resultVideoEntities.get(resultGridView.getSelectedItemPosition());
if (view != null){
	//业务逻辑

   }
}

如果是ViewPager的嵌套操作方式:

View view = (View)  mPagerAdapter.instantiateItem(mViewPager, mViewPager.getCurrentItem());


Adapter 的 调用getView 可以

 





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值