カーソルを使用して水平スワイプを実行しようとしていますが、何かを理解しているわけではありません。うまくいけば、ここの誰かが理解を助けてくれます。
アイテムのリストを表示するアクティビティがあります。ListView
カスタム によってサポートされる を使用し、CursorAdapter
そのアダプタは によって管理されますLoaderCallback
。これはすべて標準的なものです。
ユーザーがリスト内の項目をクリックすると、その項目に関する詳細情報を表示したいと考えています。現在、選択したアイテムの ID を渡して、新しいアクティビティを開始しています。このアクティビティは、アイテムに関する情報をデータベースから読み込みます。繰り返しますが、標準的なものです。
現在、アイテムのリストを行き来し、アイテムをクリックしてそのアイテムの詳細を表示することは、最適なユーザー エクスペリエンスではありません。ユーザーがアイテムをクリックしてその情報を表示できるようにしてから、スワイプできるようにすることが望ましいでしょう。リスト内の次または前の項目に関する詳細を表示します。
ListView
したがって、アイテムが でクリックされたときに、 を含むアクティビティを開始する必要があると仮定しますViewPager
。これViewPager
は、適切な位置でビューをフェッチする責任がある PagerAdapter によって支えられています。
CursorAdapter
したがって、リスト アクティビティで使用される を詳細アクティビティに渡しPagerAdapter
、カーソルをトラバースして現在のアイテムの詳細をビュー ページャーに表示する を実装したいと思います。これは非常に単純に思えます:カーソルから Fragment をgetItem(pos)
呼び出してから作成するなどです。cursor.moveToPosition(pos)
しかし、(1)CursorAdapter
バンドル内で渡すためにシリアル化できるとは思わないため、アクティビティに a を渡す方法がわかりません。また、(2) CursorAdapter を別のアクティビティに渡すのをためらっています。LoaderCallbacks
ライフサイクルを管理するために添付されていません。
考えられる解決策の 1 つは、新しいアクティビティを開始し、そのアクティビティで新しい検索を実行して、リスト アクティビティで見つかったカーソルと同等のカーソルを取得することです。たとえば、リスト アクティビティが「title=foo」に一致するアイテムを表示している可能性があるため、アイテム 10 がクリックされると、アイテム 10 に関する情報を表示する新しい詳細アクティビティを作成しますが、「title=foo」検索を実行して横スワイプで使えるカーソル。しかし、これは同じ検索を 2 回実行していることを意味します。1 回はリスト ビューで、もう 1 回はページング ビューです。検索に時間がかかる場合は、これが問題になることがあります。
カーソルをグローバルな静的領域 ( などApplication
) に格納することもできますが、これにも危険が伴うようです。
もありますParcelable
が、これは、一方の側でカーソルをシリアル化し、もう一方の側で逆シリアル化していることを意味すると思います。リストが大きい場合は、検索を再度実行して新しいカーソルを取得する方が効率的です。
これは一般的なシナリオだと確信しているので、複数のアクティビティ間でカーソルを管理するためのベスト プラクティスは何か、または他のアプローチの方が優れているかどうかを知りたいです。