2015-07-11 67 views
1

我有一個使用CursorLoader的圖庫應用程序,允許按特定元數據對圖像進行排序。排序是在創建CursorLoader時定義的。CursorLoader排序順序和更新

  // Returns a new CursorLoader 
      return new CursorLoader(
        this,     // Parent activity context 
        Meta.Data.CONTENT_URI, // Table to query 
        projection,    // Projection to return 
        selection,    // No selection clause 
        selectionArgs,   // No selection arguments 
        sort     // Default sort order 
      ); 

如果用戶選擇圖像,它們被帶到觀看者。他們有機會操縱元數據。這會導致一個自動度假村,這可能會造成混亂。所選圖像可能會根據排序從中間移動到最後,而用戶不會意識到這一點,他們會在他們認爲可能的時候無法輕掃。

最初是否有任何方法對CursorLoader進行排序,然後讓它保持_id的順序,從此,即使排序所依據的數據發生了變化?


編輯:可能的解決方案

我能想到的唯一的事情就是維持「秩序」列觀看者的活動將整理並「選擇」列中,將處理的選擇。

在啓動查看器之前,我將循環訪問插入'訂單'計數器的光標。我會然後批量插入。查看器活動應保持先前的順序,而不管查看器中元數據的更改。

兩個額外的列感覺有點像黑客,但它應該工作。我唯一能想到的其他事情是爲查看器管理一個單獨的自定義數據源,但這有它自己的問題。

希望有一個更好的方法來做到這一點。

回答

0

使用CursorLoader的主要原因是爲了利用基本活動,可以確保在活動之間使用相同的數據集,而無需額外的編碼。然而,由於我的第二個活動需要「鎖定」到之前的數據集,我意識到這是CursorLoader的糟糕用法,因爲它的主要優勢是與數據庫的更改保持同步。我其實想在第二項活動中忽略這些變化。相反,我爲第二個應用程序創建了自定義數據集管理器。

(不確定這是一個真正相關的問題,但是由於有人投了票,我會分享我的最終結論)