Java 不跳转地更改列表视图
每次我在Java 不跳转地更改列表视图,java,android,listview,android-arrayadapter,Java,Android,Listview,Android Arrayadapter,每次我在活动中更改我的列表视图,它都会跳到第一个 我首先使用此代码设置listView listView.setAdapter(new ArrayAdapter<String>(this, R.layout.home_row, R.id.home_row_price, items)); listView.setAdapter(新阵列适配器, R.layout.home_row,R.id.home_row_price,items)); 然后
活动
中更改我的列表视图
,它都会跳到第一个
我首先使用此代码设置listView
listView.setAdapter(new ArrayAdapter<String>(this,
R.layout.home_row, R.id.home_row_price, items));
listView.setAdapter(新阵列适配器,
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));
listView.setAdapter(新阵列适配器,
R.layout.home_row,R.id.home_row_price,items));
再次使用新字符串[]项
但每次它跳转到列表视图的第一个,我能做什么?您可以使用change
String[]
来
List<String> items= new LinkedList<String>();
List items=newlinkedlist();
您不必每次都先跳转。
在listview中,当您要设置适配器时,此时只需先移动,然后就可以添加、更新或删除列表中的项目,而无需先移动
为此,请遵循以下步骤
(-) 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();
(-)项的第一个数组应该在顶部声明,表示在方法之外。
(-)也在顶部声明适配器的实例,如下所示
字符串[]项;
阵列适配器;
(-)现在,首先将值分配给项并设置为适配器。
喜欢
dataAdapter=new ArrayAdapter(此,R.layout.home\u行,R.id.home\u行,项目价格)
setAdapter(dataAdapter);
(-)现在,当您想要以任何方式从数组中添加、更新或删除项时,请执行该操作。
(-)然后,**最重要的**只需在编辑数组后的行下方写下即可。
dataAdapter.notifyDataSetChanged();
所以,现在每当您在items数组中进行更改时,只需在它之后的行上方调用,您的listview将根据更改进行更新
希望这能起作用首先使用ArrayList而不是字符串数组来存储数据。ArrayList可以动态更改(即,它们可以动态更改大小)。 不要将匿名UOS适配器设置到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。当您向listview添加新项目时,请执行以下操作:
arrayList.add(yourData);
...
adapter.notifyDataSetChanged();
notifyDataSetChanged()方法将刷新listview,而不会跳转到listview中的第一项
代码中的问题是,每次更改数据时,都会为ListView设置一个新适配器。因此,ListView是“重置”而不是“刷新”。跳到第一个元素是ListView的正常行为。要标识要滚动到的项目而不是开始,它使用元素的id。但这仅在返回
true
时有效
ArrayAdapter
使用位置作为id,因此可能正是您要查找的位置。但是它从hasStableIds()
返回false
。您可以使用它的自定义子类使其工作
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;
}
}
公共类StableArayAdapter扩展了ArrayAdapter{
公共stablerayadapter(上下文ctx、int-res、int-txt、T[]obj){
超级(ctx、res、txt、obj);
}
@凌驾
公共布尔表ID(){
返回true;
}
}
更新内容时,您希望列表视图位于什么位置?然后请选择此作为接受答案