簡體   English   中英

從圖庫中選擇圖像但結果返回到調用活動而不是片段

[英]Selecting image from gallery but the result returned to the calling activity but not the fragment

我有一堂課,我有導航抽屜。 然后作為導航抽屜選項,我有一個片段,如果我們點擊一​​個選項,那么另一個片段被稱為替換當前的片段。 在單擊按鈕的新片段中,我想從圖庫中選擇一個圖像,然后將其顯示在同一個片段中。

我已經成功地到達了我們從圖庫中選擇圖像的部分,但是在選擇圖像后,應用程序進入了調用活動。

我為此使用 startActivityForResult 和 onActivityResult 。

private void selectImage() {
    final CharSequence[] items = { "Take Photo", "Choose from Library", "Cancel" };

    AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
    builder.setTitle("Add Photo!");
    builder.setItems(items, new DialogInterface.OnClickListener() {
        @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
        @Override
        public void onClick(DialogInterface dialog, int item) {
            if (items[item].equals("Take Photo")) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                startActivityForResult(intent, REQUEST_CAMERA);
            } else if (items[item].equals("Choose from Library")) {
                Intent intent = new Intent(
                        Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                intent.setType("image/*");
                startActivityForResult(
                        Intent.createChooser(intent, "Select File"),
                        SELECT_FILE);
            } else if (items[item].equals("Cancel")) {
                dialog.dismiss();
            }
        }
    });
    builder.show();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == REQUEST_CAMERA) {
            Toast.makeText(this.getActivity().getBaseContext(), "Reached onActivityResult:Camera", Toast.LENGTH_LONG).show();

        } else if (requestCode == SELECT_FILE) {
            Toast.makeText(this.getActivity().getBaseContext(), "Reached onActivityResult:Gallery", Toast.LENGTH_LONG).show();

        }

    }
}

從對話框中選擇一個選項然后選擇圖像后,onActivityResult 被調用,但隨后片段的托管活動被調用並且視圖發生變化並且圖像不持久

任何幫助表示贊賞。

TIA

您需要為所有未處理的請求代碼調用super.onActivityResult() 在 android Activity 中,總是首先通過onActivityResult()處理結果。

您在 Fragment 中調用startActivityForResult()

參考這個答案: onActivityResult is not being called in Fragment

我剛剛嘗試過,它似乎對我有用。 這是代碼

分段

private void selectImage() {
    final CharSequence[] items = {
            "Take Photo", "Choose from Library", "Cancel"
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
    builder.setTitle("Add Photo!");
    builder.setItems(items, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int item) {
            if (items[item].equals("Take Photo")) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                startActivityForResult(intent, REQUEST_CAMERA);
            } else if (items[item].equals("Choose from Library")) {
                Intent intent =
                        new Intent(Intent.ACTION_PICK,
                                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                intent.setType("image/*");
                startActivityForResult(Intent.createChooser(intent, "Select File"), SELECT_FILE);
            } else if (items[item].equals("Cancel")) {
                dialog.dismiss();
            }
        }
    });
    builder.show();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i("onActivtyResult: ","Fragment");
    super.onActivityResult(requestCode, resultCode, data);
}

活動:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i("onActivtyResult: ", "Activity");
    super.onActivityResult(requestCode, resultCode, data);
}

邏輯貓

10-07 12:26:38.348  3781  3781 I onActivtyResult: : Activity
10-07 12:26:38.348  3781  3781 I onActivtyResult: : Fragment

雖然我遲到了,但解決方案可能對其他人有用 問題在於生命周期方法。 一旦我們調用隱式意圖然后返回,則調用恢復上的活動。 如果您在 onResume 中添加了更新片段的代碼,它將關閉您的片段。 因此,相應地更改 onResume。

暫無
暫無

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

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