画像を選択してアプリケーション専用ファイルに書き込むことを意図した写真ピッカーを使用しています。私の重要なソースコードのほとんどが以下に示されています。ボタンを押して最初のイメージ選択のインテントを実行すると、イメージビューが正常に更新されます。ただし、同じアクティビティで画像選択ボタンをもう一度押すと、アクティビティを終了して再起動しない限り、画像ビューは更新されません。だから私はイメージが正常に保存されていることを知っているが、なぜレイアウト内のImageViewはリフレッシュまたは更新されませんか?ImageViewで変更が反映されない/反映されない
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;
}
}
私はImageViewのイメージURIをこのファイルに設定しました。
初めて完了すると、これを反映するようにImageViewが変更されます。ただし、イメージを再度選択しようとすると(同じアクティビティ)、アクティビティを終了して再入力するまでImageViewは更新されません。私はいつもtemp.jpgに書き込もうとしているのですか?または、ImageViewの変更を反映するためにレイアウトを更新する必要がありますか?あなたが同じURIでsetImageURIを呼び出す場合
いくつかコードがありますか?あなたが書いたものから、出力ストリームを選択した画像に開く必要はありません。 –
ソースコードの大部分を追加しました。また、インテントから値をビットマップとして返すだけで、イメージビューが正常に更新されることもわかります。しかし、私はまだ問題の原因を知りたい。 – damonkashu
ImageViewsや画像ピッカーの意図についてわからないことがありますか?アクティビティを再開するまで変更を反映しないものはありますか? – damonkashu