android gridview 刷新数据问题

问题:项目用gridView分页,在onkeydown事件里按左右键,
myAdapter.notifyDataSetChanged()刷新数据没反应

解决过程:

1.请教大侠,大侠告诉说这个notifyDataSetChanged方法是不可靠的,并给了方法试试:
 gv.setAdapter(null);
gv.setAdapter(myAdapter);
这个思路是没错的,但是明显会报一个异常:

E/AndroidRuntime(  896): java.lang.IllegalStateException: Observer android.widget.AbsListView$AdapterDataSetObserver@4187da80 was not registered.
根据这个思路,在网上找到一个不是办法的解决办法:
gv.setVisibility(View.GONE);
gv.setAdapter(myAdapter);
gv.setVisibility(View.VISIBLE);

这样虽然暂时能解决刷新问题,但是又个问题出现了,每次这样隐藏再显示后,焦点会自动跑到下一级节点上,所以还是达不到效果

2.后来在网上找到一个很实际解释,在csdn上,具体链接我忘了╮(╯▽╰)╭。。。
在自定义的adapter里复写的getView方法中,相信很多人都是用

if (convertView == null) {
			View v = LayoutInflater.from(mcontext).inflate(
					R.layout.app_category_search_item, null);
			
			itemInfo = new ItemInfo();
			
			itemInfo.appicon = (ImageView)v.findViewById(R.id.iv_appicon);
			itemInfo.appname = (TextView)v.findViewById(R.id.tv_appname);
			String appname=apps.get(position).appProps.get("name");
			itemInfo.appname.setText(appname);
			
			itemInfo.appstar = (RatingBar) v.findViewById(R.id.rb_star);
			float rating=Float.parseFloat(apps.get(position).appProps.get("star"));
			itemInfo.appstar.setRating(rating);
			
			itemInfo.appprice = (TextView) v.findViewById(R.id.tv_appprice);
			String appprice=apps.get(position).appProps.get("price");
			
			v.setTag(itemInfo);
			convertView = v;  } 
                else {
			itemInfo = (ItemInfo) convertView.getTag();
		}
    return convertView; 
}

问题就是出现在这里:
if(convertView == null)

重用converView对象,这样没调用myAdapter.notifyDataSetChanged();得到的convertView都是之前的,没法达到刷新的效果

解决方法:
去掉这个if判断,调用myAdapter.notifyDataSetChanged();正常刷新O(∩_∩)O~


可能理解方面或许有错误,欢迎指正。。。


同上面之后,又出现了个问题:
1.我这个activity作为一个单例模式启动,往gridview里的每个item添加一个进度条,并在onResume里重新得到list,并调用myAdapter.notifyDataSetChanged();gridview数据并没有刷新(指的是item新加的没有刷新出来,但是list.size()却加1了)










你可能感兴趣的:(android,数据,分页,GridView,刷新)