2013-03-17 97 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

相關問題