我正在嘗試使用遊標進行水平滑動,但我只是沒有注意什麼,希望這裏有人能幫助我理解。將光標傳遞給其他活動安全嗎?
我有一個顯示項目列表的活動。它使用一個ListView
,它由一個自定義CursorAdapter
支持,該適配器由LoaderCallback
管理。這是所有標準的東西。
當用戶在列表中點擊一個項目,我想顯示有關該項目的詳細信息。目前我開始一項新活動,傳遞所選項目的ID。此活動將從數據庫加載有關該項目的信息。再次,標準的東西。
現在,來回的項目列表之間並單擊某個項目,以顯示更詳細的有關該項目是不是最好的用戶體驗,這將是最好允許用戶點擊一個項目以顯示其信息,然後允許滑動以顯示列表中下一個或上一個項目的詳細信息。
所以我假設當在ListView
中點擊一個項目時,我需要啓動一個包含ViewPager
的活動。此ViewPager
由PagerAdapter支持,它負責在適當的位置提取視圖。
所以我想通過列表中的活動細節活動中使用的CursorAdapter
,然後實施PagerAdapter
橫穿光標顯示視圖尋呼機當前項目的細節。這似乎很簡單:getItem(pos)
會叫cursor.moveToPosition(pos)
然後創建從遊標片段等
但(1)我不知道如何將CursorAdapter
傳遞給一個活動,因爲我不認爲它可以(2)我很猶豫是否將CursorAdapter傳遞給另一個活動,因爲沒有附加LoaderCallbacks
來管理生命週期。
一個可行的辦法是啓動新的活動,有活動執行新的搜索,獲得同等光標在列表中找到活動光標。例如,列表活動可能顯示了匹配「title = foo」的項目,所以當單擊項目10時,我們創建一個新的細節活動,顯示關於項目10的信息,還執行「title = foo」搜索以獲得可用於水平滑動的光標。但這意味着我正在執行相同的搜索兩次:一次在列表視圖中,一次在分頁視圖中。如果搜索需要一些時間,這可能是一個問題。
我也可以存儲在一些全局靜態區光標(如Application
),但似乎充滿風險爲好。
還有Parcelable
但我認爲,這意味着我序列化一側光標和反序列化它的另一面。對於大型列表,再次執行搜索以獲取新的遊標可能更有效。
我敢肯定,這是一個常見的場景,所以我想知道什麼是跨多個活動遊標管理最佳實踐,或者一些其他的方法可能會更好。
難道你不能創建一個數據庫來支持你的列表項並將索引傳遞給信息活動嗎?或者在列表視圖頂部創建一個隱藏視圖,以顯示所選項目的信息,並在用戶想要返回列表視圖時將其隱藏。 – Rawr
感謝您的評論。您對在現有活動中現有列表視圖頂部創建詳細視圖的建議感興趣。根本不使用單獨的活動。我假設這裏將從'onListItemClicked'處理程序的佈局中移除列表視圖,然後將'ViewPager'添加到佈局中。棘手的問題將是處理後退按鈕以返回到原始列表視圖,以及在細節視圖與列表視圖(使用片段)並存時橫屏模式下該做什麼。但我會給這個更多的想法。 –
另外我正在使用一個數據庫;如果使用單獨的詳細活動,則一個選項(我已經建議)將再次執行相同的搜索,並根據列表項的位置調用'cursor.moveToPosition()'。我不喜歡這個選項,因爲這意味着執行兩次相同的搜索並出現相關的性能問題。 –