簡體   English   中英

嘗試從片段中的圖像庫中選擇圖像 - Android

[英]Trying to choose an image from image gallery from a Fragment - Android

我正在嘗試使用片段中的此代碼從圖像庫中選擇圖像:

    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_CALLBACK);

在我的活動中,我放置了以下代碼:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == FirstInstallFragment.PICK_IMAGE_CALLBACK && resultCode == Activity.RESULT_OK) {
        if (data.getData() == null) {
            return;
        }

        FirstInstallFragment firstInstallFragment = (FirstInstallFragment) getSupportFragmentManager().findFragmentByTag(FIRST_INSTALL_FRAGMENT_TAG);
        if (firstInstallFragment != null && firstInstallFragment.isVisible())
        {
            firstInstallFragment.onOpenImageResult(data);
        } 
    } 
}

現在奇怪的是,當我從圖片庫中選擇一個圖像時,我的應用程序會關閉,但不是以關閉的方式關閉,而是像當您處於活動狀態並按下后退按鈕時,它關閉但仍在后台運行。

我在onActivityResult()放置了一個斷點,但它不起作用,所以我想它不會進入onActivityResult()

為什么會發生這種情況,如何在選擇圖像后再次顯示 Fragment?

不是在活動中調用onActivityResult()而是在片段中調用相同的方法,因為您使用了startActivityForResult()而不是getActivity().startActivityForResult()所以這就是您無法在活動的onActivityResult()獲得回調的原因。

你可以這樣做

 Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        getActivity().startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_CALLBACK);

或者您可以在片段中覆蓋此方法

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }

當您調用startActivityForResult() ,活動的onActivityResult()方法將首先獲得響應,然后 Fragment 的onActivityResult()將被觸發。

似乎如果您在應用程序的主要活動上運行此代碼,則會遇到此問題。 我設法通過在另一個活動中實現代碼來解決它。

暫無
暫無

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

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