2016-04-07 20 views
0

Ich habe die MediaStore-Klasse verwendet, um alle Ordner mit Bildern im Speicher abzurufen. Aber das Problem ist, es zeigt den gleichen Ordner wie oft die Anzahl der Bilder darin.Wie erhalten wir alle Ordner, die Bilder enthalten, mit der MediaStore-Klasse (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)); 
     } 
    } 
} 

Hier sind BucketName und bucketId ArrayLists vom String-Typ.

@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; 
    } 
} 

Oben ist die myCustomAdapter-Klasse, die die BaseAdapter-Klasse erweitert.

+0

Haben Sie etwas von sich selbst zuerst versucht zu tun? – aribeiro

+0

@aribeiro. Ja, ich habe eine RecyclerView in ein Fragment eingefügt, das cardView enthält. und ich habe onClickListener() auf cardView gesetzt, um den ersten Satz von Dateien anzuzeigen, die Dateiverarbeitung in Java verwenden. Danach bin ich fest und denke, wie viele weitere Fragmente ich verwenden werde, da ich die Anzahl der verschachtelten Ordner nicht kenne. und nach wie vielen Ordnern werde ich zu den Dateien gelangen ... – Prabh

+0

Irgendwelche Ideen ... !!! – Prabh

Antwort

0

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

Sie Abfrage für jedes verfügbare Bild daher Rückkehr Cursor wie viele Datensätze haben. Wenn Sie also über das Rad fahren, erhalten Sie natürlich doppelte Buckets. Versuchen Sie Bilder aus Abfrage und Abfrage für Eimer nur ausschließen verfügbar wie

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

wenn Sie noch doppelte Werte empfangen dann versuchen String projection[] = {"DISTINCT " + MediaStore.Images.Media.BUCKET_DISPLAY_NAME, MediaStore.Images.Media.BUCKET_ID};

+0

es arbeitete für mich. Danke. Gibt es eine Möglichkeit, eine onItemClickListener() auf listView hinzufügen und zeigen Sie den Inhalt des Ordners, d. H. Bilder darin mit Content-Provider. – Prabh

+1

erste Frage leicht beantwortet von Google tatsächlich (Kommentar nicht so viel Code zulassen). Zweitens - ich weiß nicht, habe nicht zu viel Erfahrung in Content-Provider –

+0

Gibt es eine andere Möglichkeit, doppelte Buckets zu entfernen?, weil ich sie öffnen und auf die Dateien zugreifen muss.So brauche ich MediaStore.Images.Media .DATA-Spalte darin. – Prabh