2016-04-07 4 views
0

私は、MediaStore Classを使用して、ストレージ内のすべての画像フォルダを取得しました。 しかし、問題は、同じフォルダがその中にある画像の数だけ何度も表示されていることです。MediaStoreクラス(ANDROID)を使用して画像を含むすべてのフォルダを取得するにはどうすればよいですか?

public void getImageDirProvider(){ 
    Uri uri= MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
    String projection[]={MediaStore.Images.Media.BUCKET_DISPLAY_NAME,MediaStore.Images.Media.BUCKET_ID,MediaStore.Images.Media._ID}; 
    imageCursor=getActivity().getContentResolver().query(uri,projection,null,null,null); 


    if (imageCursor!=null){ 
     while(imageCursor.moveToNext()){ 

      bucketName.add(imageCursor.getString(0)); 
      bucketId.add(imageCursor.getString(1)); 
     } 
    } 
} 

ここで、bucketNameとbucketIdはString型のArrayListsです。

@Override 
    public int getCount() { 
     return bucketName.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return bucketName.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    class Holder { 
     ImageView iview; 
     TextView tview; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     Holder hold = new Holder(); 

      convertView = layoutInflater.inflate(R.layout.my_list_adapter, parent, false); 

      hold.tview = (TextView) convertView.findViewById(R.id.text_view_adapter); 
      hold.iview = (ImageView) convertView.findViewById(R.id.image_view); 

     hold.tview.setText(getItem(position).toString()); 
     hold.iview.setImageResource(android.R.drawable.ic_btn_speak_now); 
     return convertView; 
    } 
} 

上記は、BaseAdapterクラスを拡張したmyCustomAdapterクラスです。

+0

を試し、その後重複した値を受け取る場合のようにのみ利用可能バケットのクエリおよびクエリから

String projection[]={MediaStore.Images.Media.BUCKET_DISPLAY_NAME,MediaStore.Images.Media.BUCKET_ID};

を画像を除外するようにしてください? @aribeiro。 – aribeiro

+0

はい、私はcardViewを含むフラグメントのrecyclerViewを入れました。と私はJavaでのファイル処理を使用してファイルの最初のセットを表示するcardViewにonClickListener()を入れている。その後、私は入れ子になっているフォルダの数を知っていないので、どのくらい多くのフラグメントを使用するか考えています。どのくらいの数のフォルダにファイルを取得しようとしたら... – Prabh

+0

アイデア... !!! – Prabh

答えて

0

String projection[]={MediaStore.Images.Media.BUCKET_DISPLAY_NAME,MediaStore.Images.Media.BUCKET_ID,MediaStore.Images.Media._ID};

あなたはので、カーソルがのように多くのレコードを持って戻って使用可能なすべての画像を問い合わせます。だからあなたはそれをサイクリングすると、もちろん、重複バケツを受け取る。 あなたが最初に自分で何かをやってみましたあなたはまだ String projection[] = {"DISTINCT " + MediaStore.Images.Media.BUCKET_DISPLAY_NAME, MediaStore.Images.Media.BUCKET_ID};

+0

は私のために働いています。ありがとうございます。 listViewにonItemClickListener()を追加して、コンテンツプロバイダを使用してフォルダ内のイメージ(コンテンツ)を表示する方法はありますか? – Prabh

+1

最初の質問は簡単にグーグルが実際に答える(コメントはコードの多くを許可しない)。二番目 - 私は知らない、コンテンツプロバイダーでの経験があまりありません –

+0

重複したバケットを削除する別の方法はありますか?それらを開き、そのファイルにアクセスする必要があるためです。MediaStore.Images.Mediaが必要ですその中の.DATA列。 – Prabh

関連する問題