2

我在将新项目添加到 aListView以显示在ListView. 但是,当将新项目添加到 时ListView,我希望当前项目保持可见,并在其上方添加新项目。

为此,我从这里遵循了解决方案:https ://stackoverflow.com/a/3035521/450534当这也不起作用时,我开始进行一些实验。

另外值得一提的是,我正在使用 Chris Banes 的 Pull to Refresh 库。

现在奇怪的是,当我paged在最后一项下方添加数据时ListView,一切正常。但是我很困惑为什么新项目不会放在当前项目之上并保持当前位置。这是我到目前为止所做的(在 中onPostExecute()):

// GET THE CURRENT LISTVIEW POSITION (USED TO MAINTAIN SCROLL POSITION)
int currentPosition = actualListView.getFirstVisiblePosition();
Log.e("POSITION", String.valueOf(currentPosition));

View v = actualListView.getChildAt(0);

int top = (v == null) ? 0 : v.getTop();
Log.e("TOP", String.valueOf(top));

/*****  APPEND NEW DATA TO THE ADAPTER AND THE LISTVIEW     *****/
// CAST THE ADAPTER (AGAIN)
adapter = new NewsFeedAdapter(getActivity(), arrFeeds);

// SET THE ADAPTER TO THE LISTVIEW
actualListView.setAdapter(adapter);

// SET THE SCROLL POSITION
actualListView.setSelectionFromTop(currentPosition, top);

lv.onRefreshComplete();

这是开始,ListView这是在顶部添加新项目后仍应看到的内容(在此上方)。我计划展示一个小布局,显示顶部有多少新提要。就像 Facebook 应用程序现在所做的那样。

ListView 的开始

但是新项目被添加到底部ListView而不是现有项目上方的顶部。

新项目被添加到 ListView 的底部

我错过了什么明显的东西吗?如果您需要我添加更多代码,请告诉我,我会立即添加。

4

1 回答 1

3

另一种选择是将项目添加到用于填充适配器的 ArrayList 的 0 poisiton 处。

  your_array_list.add(int index, Object element) //Inserts the specified element at the specified position in this list.

添加后,您可以调用 listAdapter 上的 notifyDataSetChanged()。

请确认它是否有效..

于 2013-03-17T09:44:46.280 回答