gpt4 book ai didi

android - 如何从 Fragment 中的 onActivityResult 获取结果?

转载 作者:IT老高 更新时间:2023-10-28 23:19:05 27 4
gpt4 key购买 nike

我在每个项目中都使用了 Navigation drawer 我已经调用了 Fragments 所以在一个项目中我在这个 fragment 中调用了一个 Fragment需要从相机获取图片并将其设置为 canvas 背景。在此我已捕获相机图片,但不知道如何在捕获后获取此图片并将其设置为 Canvas 背景。

fragment 代码

import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.ssoft.admin.code.SharedPreferenceStore;
import com.ssoft.admin.code.Tools;
import com.ssoft.admin.salesmateco.FragSiteInspectionAdditional;
import com.ssoft.admin.salesmateco.R;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class FragSignature extends Fragment implements View.OnClickListener {
Button mSIBtnCamera;
Fragment fragment;
Tools mTools;
private static final int RESULT_OK = 1;
private static final int RESULT_CANCELED = 0;
Uri imageUri = null;
final int CAMERA_DATA = 100, INTENT_DATA = 1;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(
R.layout.frag_site_inspection_signature, null);
mSIBtnCamera = (Button) rootView.findViewById(R.id.camera);
mSIBtnCamera.setOnClickListener(this);

return rootView;
}

@Override
public void onClick(View v) {
if (v.getId() == R.id.camera) {
captureImage();
}

else {
Toast.makeText(getActivity().getApplicationContext(),
"FragSIPhotos Add Button OnClick", Toast.LENGTH_SHORT)
.show();

}
}

public void captureImage() {
// Define the file-name to save photo taken by Camera activity

String fileName = "Images.jpg";

// Create parameters for Intent with filename

ContentValues values = new ContentValues();

values.put(MediaStore.Images.Media.TITLE, fileName);

values.put(MediaStore.Images.Media.DESCRIPTION,
"Image capture by camera");

// imageUri is the current activity attribute, define and save it for
// later usage

Uri imageUri = getActivity().getApplicationContext()
.getContentResolver()
.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

/****
* EXTERNAL_CONTENT_URI : style URI for the "primary" external storage
* volume.
****/

// Standard Intent action that can be sent to have the camera
// application capture an image and return it.

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, INTENT_DATA);
Log.e("captureImage()", "state -1");
getActivity().startActivityForResult(intent, CAMERA_DATA);
Log.e("captureImage()", "end");

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e("OnActivityResult()", "1");

if (requestCode == CAMERA_DATA) {
Log.e("OnActivityResult()", "2");

if (resultCode == RESULT_OK) {
// Image captured and saved to fileUri specified in the Intent
Log.e("OnActivityResult()", "3");
} else if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
Log.e("OnActivityResult()", "4");
} else {
// Image capture failed, advise user
Log.e("OnActivityResult()", "5");
}
}
Log.e("OnActivityResult()", "6");
super.onActivityResult(requestCode, resultCode, data);
Log.e("OnActivityResult()", "7");
}

}

最佳答案

在 Activity 类中:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{

super.onActivityResult(requestCode,resultCode,data);

}

在 fragment 中:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){}

选项 1:

如果你从 fragment 中调用 startActivityForResult() 那么你应该调用 startActivityForResult() 而不是 getActivity().startActivityForResult() , 因为它会产生 fragment onActivityResult().

如果您不确定在 startActivityForResult() 上调用的位置以及调用方法的方式。

选项 2:

由于Activity得到onActivityResult()的结果,你需要重写Activity的onActivityResult()并调用super.onActivityResult()为未处理的结果代码或全部传播到相应的 fragment 。

如果以上2个选项都不起作用,那么请引用选项3,因为它肯定会起作用。

选项 3:

fragment 到 onActivityResult 函数的显式调用如下

在 Parent Activity 类中,重写 onActivityResult() 方法,甚至在 Fragment 类中重写,并调用如下代码。

Activity 中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById("yourFragment");
fragment.onActivityResult(requestCode, resultCode, data);
}

在 fragment 中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//in fragment class callback
}

关于android - 如何从 Fragment 中的 onActivityResult 获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28450049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com