每当我在ListView
中更改Activity
时,它就会跳到第一个
我首先使用此代码设置listView
listView.setAdapter(new ArrayAdapter<String>(this,
R.layout.home_row, R.id.home_row_price, items));
然后我想在列表视图中添加更多数组,所以我使用
listView.setAdapter(new ArrayAdapter<String>(this,
R.layout.home_row, R.id.home_row_price, items));
再次使用new String[] items
但是每次跳转到listView的第一个时候我该怎么办?
答案 0 :(得分:3)
首先使用ArrayList而不是String数组来存储数据。 ArrayList可以动态更改(即它们可以动态更改大小)。 不要将匿名适配器设置为listview,而是这样做:
adapter=new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,arrayList);
lv=(ListView)findViewById(R.id.listView);
lv.setAdapter(adapter);
这里我使用ArrayList将数据设置为listview。当您在列表视图中添加新项目时,请执行以下操作:
arrayList.add(yourData);
...
adapter.notifyDataSetChanged();
adapter.notifyDataSetChanged()方法将刷新listview而不跳转到listview中的第一个项目。
代码中的问题是,每次更改数据时,都要为ListView设置新的适配器。因此,ListView是&#34;重置&#34;而不是&#34;刷新&#34;。
答案 1 :(得分:1)
跳转到第一个元素是ListView
的正常行为。要识别要滚动到而不是开头的项目,它会使用元素的ID。但这仅在hasStableIds()
返回true
时才有效。
ArrayAdapter
使用该位置作为ID,所以也许正是您正在寻找的内容。但它会从false
返回hasStableIds()
。您可以使用它的自定义子类。
public class StableArrayAdapter<T> extends ArrayAdapter<T> {
public StableArrayAdapter(Context ctx, int res, int txt, T[] obj) {
super(ctx, res, txt, obj);
}
@Override
public boolean hasStableIds() {
return true;
}
}
答案 2 :(得分:0)
您可以使用更改String[]
至
List<String> items= new LinkedList<String>();
答案 3 :(得分:0)
你不需要每次都跳。 在列表视图中,当您想要设置适配器时,此时只需要先移动,然后您可以从列表中添加,更新或删除项目而无需先移动。
以下是以下步骤。
(-) First Array of items should be declare at top, means outside of methods.
(-) Also declare instance of adapter also at top, as like
String[] items;
ArrayAdapter<> dataAdapter;
(-) Now at first assign values to items and set as adapter.
like,
dataAdapter = new ArrayAdapter(this, R.layout.home_row, R.id.home_row_price, items)
listView.setAdapter(dataAdapter);
(-) Now, when ever and in any method you want to add, update or delete items from array, perform that operation.
(-) And then, **most important** just write down below line after editing array.
dataAdapter.notifyDataSetChanged();
所以,现在每当你对items数组进行更改时,只需在它之后调用以上行,你的listview将根据更改进行更新。
希望这会有效