2011-09-15 7 views
3

ケース: 私はListItems(例えば20)の可変量のListViewを持っています。最初の項目0〜6が表示されます。ユーザーはリストをスクロールして項目nrをクリックします。 15.新しいアクティビティが開始され、ある時点で、ユーザーは戻るボタンを押します。今アイテムnr。 15が同じ位置にあるか、位置が変更されたか、または削除されている可能性があります(削除された状況の処理は問題ではありません)。他の2つの状況は、リストがどのように再配置されたかを除いて、同じ動作をします(どちらも問題ではありません)。目に見えないListItemの位置を取得する

私が何をしたいか: 項目nrからリストビューに戻るとき。 15、アイテムのIDを(setResultとonActivityResultを使用して)保存し、ListViewにアイテムを再設定しました。 (問題の項目、ここでは15桁目は、再投入後に常にリストに表示されます)

次に、リストを項目nrの位置までスクロールします。 15、作成項目nr。 15 ListViewの最初に表示される項目。

問題:方法getChildCount()getChildAt(index) は、目的の項目がリストの を示していない(ビューの外にされる可能性がありますように、私の問題を解決しますが、のデータコアではありませんを使用して

  • リストアダプター)。
  • getChildCount()の代わりにgetCount()メソッドを使用すると、リスト内の適切な数の項目が得られますが、forループの項目を実行するとすぐに、index >= getChildCount()のNullPointerExceptionが発生します。
  • 私の質問

  • どのように私はすべての項目(リストまたは見えない)を介して実行し、私は私の要件を満たしているアイテムを見つけたときに、その項目が最初に作っリストビューをスクロールすることができます目に見えるアイテム?

答えて

2

ご希望のIDを持つオブジェクトを見つけるまで、あなたはその後、ListView.smoothScrollToPosition(int position)に引数として現在の位置を使用し、int getCount()Object getItem(int position)を使用してListAdapterを反復処理することができます。

あまり効率的ではありませんが、望ましい効果があるはずです。

+0

これは部分的に問題を解決し、目的のビューは目に見えるアイテムの1つになります。私は最初の目に見えるアイテムにしたいと思います。 – kaspermoerch

+1

'smoothScrollToPosition(index)'の代わりに 'setSelectionFromTop(index + 1、0)'を使って、私は望みの効果を達成しました。 – kaspermoerch

+0

@ KasperMoerch:setSelectionFromTopも使用していますが、スクロールしてもスムーズにはなりません。これについて何か提案してください。ここでこれを手伝ってください。http://stackoverflow.com/questions/15133654/achieve-smooth-scrolling-on-list-見る – Shruti

関連する問題