notifyDataSetChanged()使列表刷新,并且滚动跳回到顶部

我正在尝试实现无穷尽的滚动列表视图,但是当我调用notifyDataSetChanged()整个列表时,滚动位置将回到顶部。

这是正常现象吗?如何使它简单地添加添加的项目而不刷新并保持滚动位置?

回答:

这种行为是不正常的。我看不到您的代码,我建议您执行以下操作:

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

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<HashMap<String, String>> data;

private static LayoutInflater inflater = null;

public ImageLoader imageLoader;

public MediaItemAdapter(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 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<HashMap<String, String>>();

Adapter ma = new Adapter(this, myList);

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

然后对我的列表进行一些操作:

myList.add(someElement);

ma.notifyDataSetChanged();

如果需要删除所有项目:

myList.clear();

ma.notifyDataSetChanged();

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

以上是 notifyDataSetChanged()使列表刷新,并且滚动跳回到顶部 的全部内容, 来源链接: utcz.com/qa/428555.html

回到顶部