簡體   English   中英

我正在調用 startActivityForResult 並發現未調用 onActivityResult

[英]I'm calling startActivityForResult and finding that onActivityResult is not called

我正在嘗試從圖庫中選擇一張圖片並將其應用於文本視圖。

我已經調用了 startActivityForResult() 函數並覆蓋了 onActivityResult() 函數,但是在測試中我發現沒有調用 onActivityResult() 。 這是什么原因?

它有 super.onActivityResult(requestCode, resultCode, data)


var intent: Intent = Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
               startActivityForResult(intent, IMG_RESULT)


            }


        }

    }


    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
//I made this toast to see if the program arrived to onActivityResult but it never showed
        Toast.makeText(this, "Success", Toast.LENGTH_SHORT).show()

        if (resultCode == Activity.RESULT_OK)
            if (data != null) {
                val contentURI = data!!.data
                try {

                    val bitmap = MediaStore.Images.Media.getBitmap(this.contentResolver, contentURI)
                    val path = saveImage(bitmap)
                    Toast.makeText(this@MainActivity, "Image Saved!", Toast.LENGTH_SHORT).show()
                    image_blank!!.setImageBitmap(bitmap)

                } catch (e: IOException) {
                    e.printStackTrace()
                    Toast.makeText(this@MainActivity, "Failed!", Toast.LENGTH_SHORT).show()
                }


            }


    }

    fun saveImage(myBitmap: Bitmap): String {

使用android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI時,不能保證用戶會選擇圖像。

下面的解決方案將限制用戶選擇圖像並且沒有指定從哪個位置完成 - 用戶可以自由導航並選擇他想要的。

 val intent = Intent(Intent.ACTION_GET_CONTENT)
 intent.type = "image/*"
 intent.putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("image/jpeg", "image/png", "image/bmp"))
 startActivityForResult(intent, IMG_RESULT)

這個確切的解決方案在我的項目中有效,對你來說也應該是開箱即用的。

兩種可能性:

  1. 如果您的活動將 noHistory 設置為 true,則永遠不會調用onActivityResult()

android:noHistory="true"

如果您的活動將 noHistory 設置為 true,則永遠不會調用此方法。 https://developer.android.com/reference/android/app/Activity.html#startActivityForResult

  1. 請求代碼 < 0,不會觸發onActivityResult() (無法在任何地方找到它的文檔,但根據許多開發人員的評論)。

requestCode int:如果 >= 0,該代碼將在活動退出時在 onActivityResult() 中返回,如 startActivityForResult(Intent, int) 中所述。

如果您從fragment調用startActivityForResult ,請確保父活動將傳播結果。

在你的活動中

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case A_REQUEST_CODE_USED_IN_YOUR_ACTIVITY:
            ...
            break;
        case ANOTHER_REQUEST_CODE_USED_IN_YOUR_ACTIVITY:
            ...
            break;
        default:
            // this will propagate the result to your Fragment
            super.onActivityResult(requestCode, resultCode, data);
    }
}

在你的片段中

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case IMG_RESULT:
            if (resultCode = RESULT_OK) {
                // put here your code
                ...
            }
            break;
        default:
            super.onActivityResult(requestCode, resultCode, data);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM