Afficher toutes les images de la gallery
bonsoir, je suis un nouveau dans la programmation android et besoin d'afficher toutes les images du telephone dans mon application avec recyclerView
--Adapter
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageHolder> {
private Context context;
private List<Images> list;
public ImageAdapter(Context context, List<Images> list) {
this.context = context;
this.list = list;
}
@Override
public ImageAdapter.ImageHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_recycler,parent,false);
return new ImageHolder(view);
}
@Override
public void onBindViewHolder(ImageAdapter.ImageHolder holder, int position) {
Images images = list.get(position);
String data = images.getData();
Uri dataUri = Uri.parse("file://" + data);
try {
Bitmap bitmap = Glide.with(context)
.load(dataUri)
.asBitmap()
.into(100,100)
.get();
if (bitmap != null) {
holder.imageView.setImageBitmap(bitmap);
}else {
Toast.makeText(context,"vide",Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getItemCount() {
return list.size();
}
public class ImageHolder extends RecyclerView.ViewHolder{
public ImageView imageView;
public ImageHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
}
}
} |
--ImageClass
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public class Images {
private String data;
public Images() {
}
public Images(String data) {
this.data = data;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
} |
---MainActivity
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
public class MainActivity extends AppCompatActivity {
private static final int MY_READ_PERMISSION = 123;
private List<Images> listImages = new ArrayList<>();
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new GridLayoutManager(this,3));
}
public ArrayList<Images> getImages() {
ArrayList<Images> imageArrayList = new ArrayList<>();
Cursor cursor = null;
try {
cursor = this.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
int dataIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
do {
Images img = new Images();
String dataString = cursor.getString(dataIndex);
img.setData(dataString);
imageArrayList.add(img);
}while (cursor.moveToNext());
}catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
// Close the curosor
cursor.close();
return imageArrayList;
}
public void showImage() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_READ_PERMISSION);
//After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method
} else {
listImages = getImages();
adapter = new ImageAdapter(this,listImages);
recyclerView.setAdapter(adapter);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
if (requestCode == MY_READ_PERMISSION) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission accordée
showImage();
} else {
Toast.makeText(this, "Permission non accordée", Toast.LENGTH_LONG).show();
}
}
}
} |