Я не хочу терять фотографию на кнопке просмотра изображения, когда возвращаюсь из другого приложения - PullRequest
0 голосов
/ 05 марта 2020

Пользователи могут показать свою фотографию на кнопке imageView. Коды приведены ниже.

Проблема заключается в том, что сохраненный_элемент состояния возвращает ноль , поскольку фотография в imageView получается в функции onActivityResult .

Поэтому, если пользователи нажимают btnRegistration и возвращаются в это приложение снова, они теряют фотографию на ImageView . Не могли бы вы помочь, как отредактировать эти коды для решения этой проблемы

private var iv_crop: ImageView = null
public var tmpResultUri: Uri?=null

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            val cimg = CropImage.getActivityResult(data)
            iv_crop.setImageURI(cimg.uri)
            val resultUri = cimg.uri
             tmpResultUri = resultUri 
 }}

 @RequiresApi(Build.VERSION_CODES.O)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)


        if (savedInstanceState != null) {  
                var strResultUri: String?= null
                strResultUri = savedInstanceState.getString(strResultUri)  

               // var drawable: BitmapDrawable = iv_crop.getDrawable() as BitmapDrawable
               //var bitmapImgCropped = drawable.getBitmap()
        }
        else {
            iv_crop.setOnClickListener {
                CropImage.activity().start(this)  // <== Starts a new activity here. 
            }                          

        }

       btnRegistration?.setOnClickListener {
                val intent = Intent()
                intent.setClassName( "com.mylab.myApp","com.mylab.myApp.MainActivity")
                startActivity(intent)   // <== Starts a new activity here.
                finish()}
}

override fun onSaveInstanceState(outState:Bundle ) {
        outState.run{
            outState.putString(tmpResultUri.toString(), tmpResultUri.toString())
        }
        super.onSaveInstanceState(outState)
}

    override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
        super.onRestoreInstanceState(savedInstanceState!!)    
        savedInstanceState.run {
            val strtmpResultUri = getString(tmpResultUri.toString())
        }
    }

1 Ответ

0 голосов
/ 05 марта 2020

Вам необходимо сохранить URI вашего изображения с помощью клавиши c. Примерно так.

companion object { 
    private const val ARG_IMAGE_URI = "imageuri"
}

Затем, когда вы сохраните и получите свой URI, используйте это значение в качестве ключа, а не URI.

override fun onSaveInstanceState(outState:Bundle ) {
    outState.putString(ARG_IMAGE_URI, tmpResultUri.toString())
    super.onSaveInstanceState(outState)
}

override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)


   if (savedInstanceState != null) {  
       val strResultUri: String?= savedInstanceState.getString(ARG_IMAGE_URI)
   }

}
...