ギャラリーから画像を選択して、Android の ImageView に画像を設定しようとしています。私は意図を使用してギャラリーを開き、OnActivityResult を使用してそれを処理しています。問題は、OnActivityResult が機能していないことです。ギャラリーが開き、画像を選択すると、まだ古い画像のままです。エラーはありません。
ギャラリーを開くためのコードは次のとおりです。
wallpaper.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent i = new Intent(
Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
}
});
そして、それが私がそれを処理する方法です:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
wallpaper.setImageBitmap(BitmapFactory.decodeFile(picturePath));
Toast.makeText(getApplicationContext(), picturePath, Toast.LENGTH_SHORT).show();
// Even the Toast is not working.
}
}
リソースを壁紙として使用すると機能するため、ImageViewが正しく宣言されていると確信しています。問題はどこから来ているのですか?
編集: onActivityResult() IS が呼び出されていますが、IF 内のコードはアクセス/トリガーされていません。
これは、変更する必要がある ImageView です。
<HorizontalScrollView
android:id="@+id/wallScroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:gravity="center">
<ImageView
android:id="@+id/wallpaper"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/wall"
android:scaleType="centerCrop"/>
</HorizontalScrollView>
これがどういうわけか問題を引き起こしていることがわかりました。
編集: ImageView 宣言:
OnCreate() の前:
ImageView wallpaper;
内部 onCreate():
wallpaper = (ImageView)findViewById(R.id.wallpaper);
onClickListener はすでに上にあります。
ギャラリーが開いた直後に onActivityResult() が呼び出されることがわかりました。画像を選択するのを待たないため、IF をトリガーしません。なぜそれが起こっているのですか?
解決済み:
問題は、ギャラリーが開かれたときにアクティビティが再開され、そのために OnActivityResult() が呼び出されるのが早すぎたということです。これはすべてのデバイスで発生するわけではありませんが、すべてのデバイスで動作することを確認するには、マニフェストに追加するだけです:
android:launchMode="singleTop"
みなさん、お世話になりました!