私はチャットアプリケーションを開発しており、一度に10個のメッセージを読み込もうとしています。ユーザーがスクロールすると、さらに10個読み込まれます。したがって、私は下からのメッセージをロードする場合はtrue stackFromBottom =を使用:スクロールのリストビューの負荷(Android)
<ListView
android:id="@+id/messagesList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:transcriptMode="normal"
android:stackFromBottom="true">
を、ユーザーがトップ(firstVisibleItem == 0、最初のメッセージすなわち)に達したので、私はロードすることができたとき、私は知っているスクロールリスナーを持っていますその他のメッセージ:
スクロールして上に到達すると、さらに10個のメッセージが読み込まれますが、Listviewは自動的に下にスクロールします。通常のチャットアプリケーションのように、Listviewに新しい項目が追加されたときと全く同じ位置にとどまりたい。
これは、メッセージを追加する方法です。
@Override
protected void onPostExecute(String json) {
if(json!=null){
...
//After Parse JSON ...
chatMessageAdapter.list.add(0,chatMessage); //add the message to the top of the list
chatMessageAdapter.notifyDataSetChanged(); //listview scrolls to the bottom afterwards
}
loading = false;
startApp = false;
}
私は他のスレッドでの提案の多くを試みたが、それらのどれも実際に働きました。誰かがここで助けてくれることを願っています
多くのありがとうございます。それ以外の場合は動作しないでしょう、あなたのxmlからtranscriptMode =「ノーマル」:
// save index and top position
int index = mList.getFirstVisiblePosition();
View v = mList.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();
// notify dataset changed or re-assign adapter here
// restore the position of listview
mList.setSelectionFromTop(index, top);
はあなたがアンドロイドを削除する必要が注意してください:私のための仕事をやった