2013-03-17 79 views
2

我在ListViewListView的顶部出现一些新项目时遇到一些困难。但是,当新项目添加到ListView时,我希望当前项目保持可见状态并在其上面添加新项目。在ListView顶部添加新项目无法正常工作。将项目添加到底部而不是

为此,我遵循了这里的解决方案:https://stackoverflow.com/a/3035521/450534,并且当这种方法不起作用时,我开始尝试一些。

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

现在好奇的是,当我在ListView的最后一项下面添加paged数据时,一切正常。但我难以理解为什么新商品不会放在当前商品上方并保持当前位置。这是我迄今所做的(在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的开始,这是我应该仍然在顶部(高于此),增加新的项目后可以看到。我计划展示一个小布局,显示有多少新的Feed在上面。现在就像Facebook应用程序一样。

Start Of the ListView

但是新项目被添加到ListView的底部,而不是在上述现有项目上。

New items are added to the bottom of the ListView

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

回答

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()。

请确认它是否有效..

+0

感谢您的快速回复。我也尝试过这种方法。这个问题(我怀疑)是我在'doInBackground()'中的'for loop'中获取所有数据。此代码是从Facebook API获取新闻源。如果要说的项目数量是常数1,那么我认为你的建议可能有效。我认为至少是这样。 – SSL 2013-03-17 09:48:11

+0

即使您尝试在Asynctask的doInBackground中获取数据,您仍然会将适配器设置为该列表,并且该适配器将持有一些自定义对象列表? – 2013-03-17 09:53:55

+0

如果你的意思是POJO,那么是的。我有一个用于'ArrayList'的。这个类被称为'NewsfeedData'。你是否想要我添加'doInBackground()'的一部分? – SSL 2013-03-17 09:55:34

相关问题