2013-03-24 22 views
22

私はlistViewを持っていますが、リストビューの上部に新しい項目を追加したいのですが、リストビューでその内容をスクロールしたくありません。新しいアイテムが追加される前に、ユーザーが探していたものと同じアイテムを見てほしい。Android ListViewリストビューなしで項目を追加する

は、これは私がリストビューに新しい項目を追加する方法です:

this.commentsListViewAdapter.addRangeToTop(comments); 
this.commentsListViewAdapter.notifyDataSetChanged(); 

を、これはaddRangeToTop方法である:これは私のListViewである

public void addRangeToTop(ArrayList<Comment> comments) 
{ 
    for (Comment comment : comments) 
    { 
     this.insert(comment, 0);   
    } 
} 

:私はしたいもの

<ListView 
    android:id="@+id/CommentsListView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_above="@+id/AddCommentLayout" 
    android:stackFromBottom="true" >   
</ListView> 

ユーザーが上にスクロールしたときに古いコメントを読み込むことです。

ありがとうございました。

答えて

30

私はここで解決策重複の質問には申し訳ありませんRetaining position in ListView after calling notifyDataSetChanged

を発見しました。 最終的なコードはこれです:

android:transcriptMode="normal" 

「これは、データセットの変更通知を受信したときに、リストが自動的に一番下までスクロールしますとのみ:

int index = this.commentsListView.getFirstVisiblePosition() + comments.size(); 
    View v = this.commentsListView.getChildAt(commentsListView.getHeaderViewsCount()); 
    int top = (v == null) ? 0 : v.getTop();   

    this.commentsListViewAdapter.AddRangeToTop(comments); 
    this.commentsListViewAdapter.notifyDataSetChanged();  

    this.commentsListView.setSelectionFromTop(index, top); 
+0

これはありがとう! – sirvon

+1

良い解決策、ありがとう! –

2

ListViewのメソッドpublic void setSelection (int position)もご覧ください。新しいコメントを追加してアダプタに通知したら、それを使用して現在のアイテムを選択したままにしておくことができます。

// Get the current selected index 
int previousSelectedIndex = yourListView.getSelectedItemPosition(); 

// Change your adapter 
this.commentsListViewAdapter.AddRangeToTop(comments); 
this.commentsListViewAdapter.notifyDataSetChanged(); 


// Determine how many elements you just inserted 
int numberOfInsertedItems = comments.size(); 

// Update the selected position 
yourListView.setSelection(previousSelectedIndex + numberOfInsertedItems); 

注:コードはテストされていません。幸運

+0

ありがとう、これはどういうわけか、うまくない。 2つの項目をスクロールします。リストビューはアイテムだけでなくピクセルによってスクロールされず、setSelectionはアイテムに正確にスクロールするためだと思います。 – Harlsten

9

が、これはあなたが探しているものであるかもしれませ最後の項目が既に画面に表示されている場合 - 引用符としてhere

+1

この回答は正しいとマークする必要があります。 –

関連する問題