java listview刷新_java – notifyDataSetChanged()使列表刷新并滚动回到顶部

这种行为是不正常的。没有看到你的代码,我可以建议如下:

1)你不是从UI线程调用notifyDataSetChanged()。正确的方法:

runOnUiThread(new Runnable() {

public void run() {

adapter.notifyDataSetChanged();

}

});

2)你不小心或不打电话给adapter.notifyDataSetInvalidated();

3)在适配器中,覆盖adapter.notifyDataSetChanged();方法和添加说明转到顶部

4)如果您正在使用列表来填充适配器,则每次都提供新列表,因此适配器设置将被刷新。您应该始终提供相同的列表。但是您可以根据需要进行更改。如果要重置列表,请使用list.clear而不是list = new ArrayList();

以下是我的适配器示例:

public class Adapter extends BaseAdapter {

private Activity activity;

private ArrayList> data;

private static LayoutInflater inflater = null;

public ImageLoader imageLoader;

public MediaItemAdapter(Activity a, ArrayList> d) {

activity = a;

data = d;

inflater = (LayoutInflater) activity

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

imageLoader = new ImageLoader(activity.getApplicationContext());

}

public int getCount() {

return data.size();

}

public Object getItem(int position) {

return position;

}

public long getItemId(int position) {

return position;

}

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

View vi = convertView;

if (convertView == null) {

vi = inflater.inflate(R.layout.item_composer, null);

}

TextView title = (TextView) vi.findViewById(R.id.item_title); // title

TextView price = (TextView) vi.findViewById(R.id.price);

return vi;

}

}

呼叫适配器

List myList = new ArrayList>();

Adapter ma = new Adapter(this, myList);

适配器初始化之前,myList可以为空。

然后用我的列表做一些操作:

myList.add(someElement);

ma.notifyDataSetChanged();

如果您需要删除所有项目:

myList.clear();

ma.notifyDataSetChanged();

这样的实现是无止境的,我看到超过15000个元素没有任何问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值