ImageView ne modifie pas ou réfléchit les changements

J'utilise un sélectionneur de photo pour choisir une image et l'écrire sur un fichier privé d'application. La plupart de mon code source important est présenté ci-dessous. Une fois que j'appuie sur un bouton et que j'effectue la première tentative de sélection d'image, il met à jour avec succès la vue d'image. Cependant, une fois que j'appuie de nouveau sur le bouton de sélection d'image (dans la même activité), la vue d'image ne se met pas à jour, sauf si je sort et recommence l'activité. Je sais donc que l'image est enregistrée avec succès, mais pourquoi l'ImageView dans la mise en page ne serait-elle pas actualisée ou mise à jour?

public void onResume() { super.onResume(); ImageView myImageView = (ImageView)findViewById(R.id.contact_image); if (hasImage) { myImageView.setImageURI(Uri.fromFile(getFileStreamPath(TEMP_PHOTO_FILE))); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case PHOTO_PICKED: if (resultCode == RESULT_OK) { if (data != null) { Bundle extras = data.getExtras(); if (extras != null) { hasImage = true; bmp = (Bitmap) extras.get("data"); } } } break; } } private OnClickListener mChooseImage = new OnClickListener() { @Override public void onClick(View v) { try { // Launch picker to choose photo for selected contact Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", ICON_SIZE); intent.putExtra("outputY", ICON_SIZE); intent.putExtra("scale", true); intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile())); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); startActivityForResult(intent, PHOTO_PICKED); } catch (ActivityNotFoundException e) { // LOG THIS } } }; private File getTempFile() { try { if (!hasImage) { FileOutputStream fos = openFileOutput(TEMP_PHOTO_FILE, MODE_WORLD_WRITEABLE); fos.close(); } return getFileStreamPath(TEMP_PHOTO_FILE); } catch (FileNotFoundException e) { // To be logged later return null; } catch (IOException e) { // To be logged later return null; } } 

Suite au résultat de l'activité, j'ai défini l'URI d'image ImageView dans ce fichier.

  • SpannableString: Est-il possible d'appliquer deux ou plusieurs versions relatives?
  • Erreur d'annotation Android avec Android Studio Update 1.0
  • Est-ce qu'il y a lieu d'écrire des applications Android en PHP?
  • 'Dépendances' ne peuvent pas être appliquées à '(groovy.lang.Closure)'
  • Comment libérer un plugin d'application utilisant Android Market?
  • Ajout d'une activité SDK dans Qt pour Android
  • Lorsque cela se termine, ImageView change pour refléter cela. Cependant, si je tente de choisir l'image à nouveau (même activité), l'ImageView ne sera pas mise à jour tant que je ne quitterai pas et ne rentrerai pas dans l'activité. Je ne sais pas pourquoi cela se produit, est-ce parce que j'essaie d'écrire à la temp.jpg chaque fois? Ou dois-je rafraîchir ma mise en page de manière à refléter les changements dans ImageView?

    5 Solutions collect form web for “ImageView ne modifie pas ou réfléchit les changements”

    À en juger par le code source ImageView, ImageView ne recharge pas l'image si vous appelez setImageURI avec le même URI. Vous pouvez essayer de modifier l'URI en écrivant votre image dans un autre fichier.

    ImageView ne redessinera pas si l'URI "nouveau" est le même que l'ancien. "View.invalidate ()" ne fonctionnera pas. Pour "forcer" la mise à jour, vous pouvez:

     public void onResume() { super.onResume(); ImageView myImageView = (ImageView)findViewById(R.id.contact_image); if (hasImage) { myImageView.setImageDrawable(null); // <--- added to force redraw of ImageView myImageView.setImageURI(Uri.fromFile(getFileStreamPath(TEMP_PHOTO_FILE))); } } 

    J'ai eu un problème similaire où j'utilisais la caméra de périphériques pour prendre une photo, puis je voulais que l'imageView dans l'écran d'origine soit rafraîchie lorsque je l'ai retourné. La solution était d'appeler View.invalidate () dans onResume ().

    Pour forcer à redessiner votre widget / Affichage, appelez simplement View.invalidate();

    Invalider () non travaillé. Essayez hack:

      imageView.setImageURI(null); imageView.setImageURI(newUri); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.