2

ユーザーがスクロールできる長い ListView があります。30 秒ごとにこのリストビューを更新しています。リストビューは正常に更新されます。しかし、リストをリフレッシュする前と同じポイントまでスクロールしたいという問題が1つあります。リストを更新すると、最初の位置が表示されるためです。

AsynchronousTask を介して次のようにリストを更新しています。

private class HttpTask extends AsyncTask<String, Boolean, String> {

    @Override
    protected String doInBackground(String... params) {
        System.out.println("inside doInBackground>>!!>>> ");
        getResponse();

        return "Executed";
    }

    @Override
    protected void onProgressUpdate(Boolean... progress) {

    }

    @Override
    protected void onPostExecute(String result) {
        // publishProgress(false);
        System.out.println("post excute funt***********");
        setListAdapter(new ListAdapter(getApplicationContext(),
                R.layout.mylist, dataArr));
    }

}

事前に感謝します。

4

5 に答える 5

2

setSelectionFromTop() を使用して、位置を以前に表示されていた状態に設定してみてください。

于 2013-02-08T07:22:28.580 に答える
1

リストビューが更新されるとき、その時点で最初に表示されるアイテムの位置を取得してから、リストビューを更新し、更新する前に取得した位置を設定すると思います

    int firstPosition = mEventListView.getFirstVisiblePosition();
    EventLogAdapter eventLogAdapter = new EventLogAdapter(mContext, events);
    mEventListView.setAdapter(eventLogAdapter);
    mEventListView.setSelection(firstPosition);
于 2013-02-08T08:19:04.543 に答える
1

これを行うだけです:

listView.setSelection(position) // position is the item on the listView
于 2013-02-08T07:37:57.277 に答える
0

新しい ListAdapter を設定する代わりに、listAdapter.notifyDataSetChanged() を実行してください。これにより、新しいビューが作成される代わりにビューのコンテンツが更新され、リストビューは上にスクロールしません。

于 2013-02-08T07:22:11.487 に答える
0

What you are doing is you are assigning adapter to your list view when you call refresh

setListAdapter(new ListAdapter(getApplicationContext(),
            R.layout.mylist, dataArr));

Which is wrong

You have to refresh your adapter

dataArr.notifyDataSetChanged();

Hope this will work

于 2013-02-08T08:04:19.950 に答える