6

各タブにリストを表示するtabViewがあります。あるタブでスクロールし、別のタブに切り替えて前のタブに戻ると、前のスクロール位置を表示する代わりに、位置が一番上に戻ります。どうすればこれを達成できますか? onSaveInstanceState と onRestoreInstanceState を使用して位置を保存し、保存された位置を使用して前のスクロール位置を表示する方法を知る必要があります。

前もって感謝します。


返信ありがとうございます。すべての解決策を試しましたが、他の問題に遭遇しました。基本的に私が直面している問題は次のとおりです。

アプリを起動したときの最初のアクティビティとしてリストビューがあります。リスト項目をクリックすると、3 つのタブを含むタブ アクティビティが起動します。3 つのタブはすべて、ListActivity という同じアクティビティを使用します。ただし、3 つのタブには異なるデータが含まれています。私の質問は、タブを切り替えるときにリストの位置を保持する方法です。上記の解決策を使用すると、1 つのタブの位置を変更すると、残りのタブにも影響します。たとえば、最初のタブの 6 番目の位置にいる場合、この位置は 2 番目と 3 番目のタブに設定され、3 つのタブすべてに同じ ListActivity を使用しています。コードを共有することは許可されていません。だから、これだけ長く問題をタイプしなければなりません。また、作成されるタブの数は動的です。3 か 4 か 5 かもしれません。しかし、すべてのタブは 1 つの ListActivity を使用します。

誰でもこれを達成する方法の例を教えてもらえますか? 1. 複数のタブで使用される単一の ListActivity。2. 他のタブに影響を与えることなく、タブ内のカーソル位置を保持します。

提供されたソリューションに感謝します。前もって感謝します。

4

4 に答える 4

12

リスト ビューで setAdapter() を再度呼び出さないでください。このようなことをしてください。

if(myListView.getAdapter() == null)
    myListView.setAdapter(new myAdapter(this, R.layout.row, items));

ListView を更新する必要がある場合は、アダプターで notifyDataSetChanged() を呼び出します。

于 2011-08-23T21:11:27.300 に答える
10

ListViewの現在の位置を取得するには、

int position = mCatchList.getFirstVisiblePosition();

次に、そのListViewのあるタブに戻ると、次のように呼び出すことができます。

mCatchList.setSelection(position);

ただし、位置をsavedInstanceStateに追加する必要があるかどうかを判断するために、コードがどのように記述されているかによって異なります。

于 2011-08-23T21:22:06.803 に答える
1

オーバーライドonSaveInstanceStateして位置を保存し、位置を に戻しonRestoreInstanceStateます。バンドルは HashMap のようなものです (疑似コード):

onSaveInstanceState

bundle.putInt("MyTabsPosition", getPosition());

次にonRestoreInstanceState

pseudo.setPosition(bundle.getInt("MyTabsPosition"));
于 2011-08-24T18:27:49.667 に答える