Я использую сборщик фотографий, чтобы выбрать изображение и записать его в файл приложения-частный. Большая часть моего важного исходного кода показана ниже. Как только я нажимаю кнопку и выполняю первое намерение выбора изображения, он успешно обновляет изображение. Однако, как только я снова нажимаю кнопку выбора изображения (в том же действии), изображение не обновляется, если я не выхожу и не перезапускаю действие. Поэтому я знаю, что изображение успешно сохраняется, но почему 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;
}
}
по результатам деятельности, я установил URI образа ImageView в этот файл.
Когда он впервые завершен, изменения ImageView меняются, чтобы отразить это. Однако, если я попытаюсь снова выбрать изображение (такое же действие), ImageView не будет обновляться до тех пор, пока я не выйду из программы и не заново запустим ее. Я не уверен, почему это происходит, потому что я пытаюсь каждый раз писать на temp.jpg? Или мне нужно каким-то образом обновить мой макет, чтобы отразить изменения в ImageView?
Есть ли какой-то код отсутствует? Из того, что вы написали, не требуется открывать выходные потоки для выбранного изображения. – 2010-12-16 08:26:53
Я добавил большую часть своего исходного кода. Я также обнаружил, что если я просто верну свое значение из намерения в виде растрового изображения, изображение будет успешно обновляться. Тем не менее, я все еще хочу знать источник проблемы. – damonkashu 2010-12-16 10:21:29
так что я чего-то не знаю о ImageViews или намерении выбора изображения? что-то, что не отражает изменения до перезапуска активности? – damonkashu 2010-12-17 08:43:09