この手法を使用して、Android の写真バケットまたはギャラリーのリストを取得しています
ただし、これは各画像を反復処理するため、1000 以上の画像では処理が遅くなります。
BUCKET_DISPLAY_NAMEs のリストをより迅速に取得するために SQL (おそらく DISTINCT キーワード?) を使用する方法はありますか?
この手法を使用して、Android の写真バケットまたはギャラリーのリストを取得しています
ただし、これは各画像を反復処理するため、1000 以上の画像では処理が遅くなります。
BUCKET_DISPLAY_NAMEs のリストをより迅速に取得するために SQL (おそらく DISTINCT キーワード?) を使用する方法はありますか?
以下の解決策は、私にとってうまくいったものです。プロジェクションを個別に行うことは、メディア コンテンツ プロバイダーの選択肢ではないことがわかりました。また、これはcursorLoaderでも動作するようです。
// TODO Auto-generated method stub
String[] projection = { Images.Media._ID, Images.Media.BUCKET_DISPLAY_NAME };
HashMap<String, String> imagesGroups = new HashMap<String, String>();
String ids = null;
Cursor c = _myContext.getContentResolver().query(Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);
if (c.getCount() > 0)
{
c.moveToFirst();
do
{
String bucketDisplayName = c.getString(c.getColumnIndex(Images.Media.BUCKET_DISPLAY_NAME));
String _id = c.getString(c.getColumnIndex(Images.Media._ID));
//here is where we ensure we get a unique image id for each distinct bucket display name
if(!imagesGroups.containsKey(bucketDisplayName))
{
imagesGroups.put(bucketDisplayName, _id);
if(ids == null)
ids = _id;
else
ids += "," + _id;
}
}
while (c.moveToNext());
}
c.close();
String selection = Images.Media._ID + " IN (" + ids + ")";
CursorLoader cursorLoader = new CursorLoader(this, Images.Media.EXTERNAL_CONTENT_URI, projection, selection, null, null);
return cursorLoader;
より多くの画像を使用する場合は、遅延読み込みの概念を使用する必要があります。これが必要な場合は、http://androidsnips.blogspot.in/2010/08/lazy-loading-of-images-in-list-view-in.html または http://thinkandroid.wordpress をご覧ください。 com/2012/06/13/lazy-loading-images-from-urls-to-listviews/ この概念を使用すると、最初に読み込まれた画像がメモリに保存され、同じ画像が再度取得されると、再ロードせずに直接チェックして表示できます。これがあなたが必要とするものであることを願っています