Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不跳转地更改列表视图_Java_Android_Listview_Android Arrayadapter - Fatal编程技术网

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;
}
}

更新内容时,您希望
列表视图位于什么位置?然后请选择此作为接受答案