オブジェクトが上から追加される動的 ListView を作成しました。
ユーザーがボタンを押すと、配列の内容から listView が更新され、カスタム arrayAdapter で notifyDataSetChanged() が呼び出されます。
追加時にリストの位置を維持したいので、次のコードを追加しました。
// pausedCounter trace the number of objects(lines) to add to the listView
int idx = listView.getFirstVisiblePosition() + pausedCounter;
View first = listView.getChildAt(0);
int position = 0;
if (first != null)
position = first.getTop();
// cycle to add the new objects to the listView
for (Tweet[] tweets1 : pausedTweets)
super.updateTweets(tweets1);
listView.setSelectionFromTop(idx, position);
// reset of counter and accumulator
pausedTweets = new ArrayList<Tweet[]>();
pausedCounter = 0;
このコードは次のように動作します。getFirstVisiblePosition が 2 を返し、pausedCounter が 5 の場合、更新後にリストは新しい 5 つの要素の 3 番目に設定されます。
私が望むのは、リストの最初の可視要素を8番目に設定することです。
さらにテストした結果、このコードの実行中に listView の子の数が変化しないことがわかったので、setSelectionFromTopを呼び出した後にlistView のサイズを更新します。これが問題でしょうか?