前提・実現したいこと
Galleryから取得した画像をViewBindingしてあるImageViewに表示したいです。
なぜ表示されないのかどのようにしたら表示されるのかを教えていただきたいです。
発生している問題・エラーメッセージ
エラーは表示されていません。
該当のソースコード
kotlin
1binding.itemImage.setOnClickListener{ 2 val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { 3 addCategory(Intent.CATEGORY_OPENABLE) 4 type = "image/*" 5 } 6 startActivityForResult(intent, READ_REQUEST_CODE) 7}
上記のようにして取得した画像を表示したいです。
kotlin
1override fun onActivityResult( 2 requestCode: Int, resultCode: Int, 3 resultData: Intent? 4 ) { 5 val binding = HogeBinding.inflate(requireActivity().layoutInflater) 6 if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) { 7 var uri: Uri? = null 8 if (resultData != null) { 9 uri = resultData.data 10 if(Build.VERSION.SDK_INT < 28) { 11 val bitmap = MediaStore.Images.Media.getBitmap( 12 requireContext().contentResolver, 13 uri 14 ) 15 Log.d("bitmap", "画像をセット") 16 binding.itemImage.setImageBitmap(bitmap) 17 } else { 18 val source = ImageDecoder.createSource(requireContext().contentResolver, uri!!) 19 val bitmap = ImageDecoder.decodeBitmap(source) 20 Log.d("bitmap", "画像をセット") 21 binding.itemImage.setImageBitmap(bitmap) 22 } 23 } 24 } 25 }
onActivityResult の中で inflate する意味がわかりません。普通は onCreate などで inflate したものをプロパティに保存してそれを使うのでは…。
コードを読んだ経験が浅く、業務経験がないので、hoshi-takanori様がおっしゃる「普通」が分かりませんでした。
申し訳ございませんでした。
きつい言い方になってしまってごめんなさい。
inflate メソッドは layout xml ファイルに基づいて表示部品を新たに生成しますが、onActivityResult ではすでに画面上に存在する ImageView の表示内容を変更したいってことだと思いますので、新しい表示部品を作る必要はないはずです。
質問文内のコードはどちらもDialogFragmentクラスを継承したクラス内に書かれている状況です。(さらに質問文の1番目のコードがonCreateDialog内に書かれています。)
class hoge: DialogFragment(){
private lateinit var binding: hogeBinding
override fun onCreateDialog(xxx){
  // inflate
}
override fun onActivityResult(yyy){
}
}
のようにフィールドを宣言する位置を変更したら、うまく動作しました。アドバイスをくださりありがとうございました。

回答1件
あなたの回答
tips
プレビュー

