[英]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.