更改列表视图而不跳跃

时间:2016-05-13 11:06:05

标签: java android listview android-arrayadapter

每当我在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的第一个时候我该怎么办?

4 个答案:

答案 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将根据更改进行更新。

希望这会有效