自定义adapter 改变数据后调用notifyDataSetChanged() 不起作用

1.问题描述:

ListView填充的数据改变时需要及时刷新页面,,正常来讲我们只需要调用 adapter.notifyDataSetChanged();方法就可以了,系统使用观察者模式去通知修改相关liseView的页面值。但是今天发现一个问题 无论我什么调notifyDataSetChanged() 页面就是不改变。。。。 这可愁死了

2.解决方法:

后来网上发现了一个很简单的解决方法 记录下,加深印象,直接上代码

package com.cnlits.foods.adapter;import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.cnlits.foods.R;import com.cnlits.foods.comm.ImageLoader; public class StoreLazyAdapter extends BaseAdapter {private Activity activity;private ArrayList<HashMap<String, String>> data;private static LayoutInflater inflater = null;public ImageLoader imageLoader;public StoreLazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {activity = a;data = d;inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);imageLoader = new ImageLoader(activity.getApplicationContext());}public void refresh(ArrayList<HashMap<String, String>> d) {data = d;notifyDataSetChanged();} public int getCount() {return data.size();}public Object getItem(int position) {return position;}public long getItemId(int position) {return position;} static class ViewHolder{ImageView ivLog;TextView tvTitle;TextView tvSubTitle;TextView tvOther;}public View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if(convertView==null){convertView = inflater.inflate(R.layout.store_list, null);holder = new ViewHolder();holder.tvTitle = (TextView)convertView.findViewById(R.id.tvTitle);holder.tvSubTitle = (TextView)convertView.findViewById(R.id.tvSubTitle);holder.tvOther = (TextView)convertView.findViewById(R.id.tvOther);holder.ivLog = (ImageView)convertView.findViewById(R.id.iv_log);convertView.setTag(holder);}else{holder = (ViewHolder)convertView.getTag();}HashMap<String,String> map = data.get(position);holder.tvTitle.setText(map.get("tvTitle"));holder.tvSubTitle.setText(map.get("tvSubTitle"));holder.tvOther.setText(map.get("tvOther"));imageLoader.DisplayImage(map.get("iv_log"),holder.ivLog);return convertView;}}上面的代码是不是很熟悉,但你有没有发现多了一个方法public void refresh(ArrayList<HashMap<String, String>> d) {data = d;notifyDataSetChanged();} 没错就是这个方法

在activity里原来是掉用adapter.notifyDataSetChanged()方法 修改为调用adaper.refresh(data); 就可以了, 页面数据马上改变。

收敛自己的脾气,偶尔要刻意沉默,

自定义adapter 改变数据后调用notifyDataSetChanged() 不起作用

相关文章:

你感兴趣的文章:

标签云: