gpt4 book ai didi

android notifyDataSetChanged 不起作用

转载 作者:行者123 更新时间:2023-11-29 14:31:55 24 4
gpt4 key购买 nike

我在onCreate()中给ListView绑定(bind)了一个adapter,每次当activity在onResume()时,我都会更新adapter中的appinfos数据,并在adapter setdata()方法中调用notifyDataSetChanged。但是即使我的适配器中的数据发生变化,我也没有刷新 ListView。我不知道是什么问题,你能帮我解决一下吗?谢谢

这是我使用适配器并将数据设置为 ListView 的 Activity 。

List<AppInfo> appinfos = new ArrayList<AppInfo>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

getAppInfos();
adapter=new UnistallListAdapter(this,appinfos);
applistView.setAdapter(adapter);
}

@Override
protected void onResume() {
getAppInfos();
adapter.setdata(appinfos);
super.onResume();
}


private List<AppInfo> getAppInfos() {
appinfos.clear();
//do some thing, new an item; and add into appinfos object
//the appinfos data often changed here,
// as I uninstall app before activity called onResume().
......
appinfos.add(info);
.....
return appinfos;
}

下面是我的 UnistallListAdapter 的主要代码,以及如何更改它的数据。

private List<AppInfo>infos;
public UnistallListAdapter(Context c,List<AppInfo>info)
{
mContext = c;
inflate=LayoutInflater.from(c);
infos=info;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return infos.get(position);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return infos.size();
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

ViewHold holder = null;
if(convertView==null)
{
convertView=inflate.inflate(R.layout.uninstall_item, null);
holder=new ViewHold();
holder.name=(TextView)convertView.findViewById(R.id.name);
holder.icon=(ImageView)convertView.findViewById(R.id.icon);

holder.ai = infos.get(position);;
convertView.setTag(holder);
}
else
{
holder=(ViewHold)convertView.getTag();
}

AppInfo ai = holder.ai;
holder.name.setText(ai.mAppLabel);
holder.icon.setImageDrawable(ai.mIcon);

return convertView;
}

private class ViewHold
{
AppInfo ai;
ImageView icon;
TextView name;
}
public void setdata(List<AppInfo> dataList) {
infos = dataList;
notifyDataSetChanged();
}

请给我一些帮助,欢迎任何有关原因的提示。非常感谢您的帮助。

最佳答案

holder.ai = infos.get(position);

您在 View 持有者中存储了一个对象引用并且从不更新它。

View holder 不应包含对数据对象的引用,而应仅包含 View 。每次在 getView() 中使用 getItem(position) 获取最新的数据对象。

关于android notifyDataSetChanged 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22036744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com