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.

  • Remplacez l'application android.support.v4.app.ActionBarDrawerToggle avec la version support.v7. Cause le drawer ne fonctionne pas sur Jelly Bean
  • Android-Studio: Erreur: Impossible de créer la machine virtuelle Java
  • Définir la position dynamique de Toast sur une vue
  • Quelle est la meilleure pratique pour nommer l'id d'XML Element dans Android?
  • Android: écoutez le changement d'orientation?
  • Android System WebView cesse les applications Android! "Les pierres tombales sont désactivées sur les versions utilisateur JB MR2 +"
  • 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.