onActivityResult가 fragment에서 호출되지 않습니다.
이 조각을 호스팅하는 활동은 다음과 같습니다.onActivityResult
카메라 활동이 되돌아오면 호출됩니다.
내 조각은 카메라가 사진을 찍도록 전송된 의도로 결과에 대한 활동을 시작합니다.사진 응용 프로그램이 정상적으로 로드되고 사진을 찍고 돌아갑니다. 그onActivityResult
하지만 절대 맞지 않습니다.중단점을 설정했지만 아무것도 트리거되지 않습니다.조각이 가질 수 있습니까?onActivityResult
제공되는 기능이기 때문에 그렇게 생각합니다.왜 이것이 트리거되지 않습니까?
ImageView myImage = (ImageView)inflatedView.findViewById(R.id.image);
myImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 1888);
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if( requestCode == 1888 ) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
((ImageView)inflatedView.findViewById(R.id.image)).setImageBitmap(photo);
}
}
은 호스활재됩니다의정이를 재정의합니다.onActivityResult()
하지만 그것은 전화를 하지 않았습니다.super.onActivityResult()
처리되지 않은 결과 코드의 경우.보아하니, 비록 그 조각이 그를 만드는 것이지만.startActivityForResult()
호출, 활동은 결과를 처리하는 첫 번째 기회를 얻습니다.이것은 조각의 모듈화를 고려할 때 의미가 있습니다.가 후한현을 했을 때super.onActivityResult()
처리되지 않은 모든 결과에 대해, 조각은 결과를 처리할 수 있는 기회를 얻었습니다.
그리고 @siqing 답변에서도 다음과 같이 답합니다.
파편에 대한 결과를 얻으려면 전화를 해야 합니다.startActivityForResult(intent,111);
에 getActivity().startActivityForResult(intent,111);
당신의 파편 안에.
하신 것 요.getActivity().startActivityForResult(intent,111);
당신은 보화해에 전화해야 .startActivityForResult(intent,111);
.
옵션 1:
전화하시는 경우startActivityForResult()
그 파편에서 전화를 해야 합니다.startActivityForResult()
,것은 아니다.getActivity().startActivityForResult()
Activity Result()는 fragment입니다.
어디로 전화를 건 건지 잘 모르실 경우startActivityForResult()
그리고 당신이 어떻게 메소드를 호출할 것인지.
옵션 2:
은 활은다음결얻과때다기의 를 얻기 입니다.onActivityResult()
활동의 작업을 재정의해야 합니다.onActivityResult()
와를 요.super.onActivityResult()
처리되지 않은 결과 코드에 대해 또는 모두에 대해 각 fragment로 전파합니다.
위의 두 가지 옵션이 작동하지 않으면 옵션 3을 참조하십시오. 확실히 작동합니다.
옵션 3:
fragment에서 onActivityResult 함수로의 명시적 호출은 다음과 같습니다.
상위 활동 클래스에서 onActivityResult() 메서드를 재정의하고 Fragment 클래스에서 동일한 메서드를 재정의하고 다음 코드로 호출합니다.
상위 클래스:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
fragment.onActivityResult(requestCode, resultCode, data);
}
하위 클래스:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// In fragment class callback
}
활동에서 조각을 모르는 경우, 모든 조각을 열거하고 활동 결과 인수를 전송합니다.
//자바
// In your activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
//코틀린
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
for (fragment in supportFragmentManager.fragments) {
fragment.onActivityResult(requestCode, resultCode, data)
}
}
를 안고 있습니다.ChildFragmentManager
관리자가 결과를 중첩된 조각으로 전달하지 않으므로 기본 조각에서 수동으로 전달해야 합니다.
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
Fragment fragment = (Fragment) getChildFragmentManager().findFragmentByTag(childTag);
if (fragment != null) {
fragment.onActivityResult(requestCode, resultCode, intent);
}
}
FragmentActivity
를 대체합니다.requestCode
수정된 것으로그 후에, 언제onActivityResult()
FragmentActivity
상위 16비트를 구문 분석하고 원본 Fragment의 인덱스를 복원합니다.체계를 : 성구표를보십오시이오.
루트 레벨에 몇 개의 조각이 있으면 문제가 없습니다.그러나 예를 들어, 중첩된 조각이 있는 경우Fragment
에 탭이 몇개있는 안에 몇 의 탭이 ViewPager
문제에 직면할 것임을 보장합니다(또는 이미 직면했습니다).
내부에 인덱스가 하나만 저장되어 있기 때문입니다.requestCode
그것은 의 색인입니다.Fragment
부에 에.FragmentManager
중첩된 조각을 사용하는 경우 하위 조각이 있습니다.FragmentManager
fragments 목록인 fragment 목고있이다니를 의 전체 따서서에시여작전하체합니다저장체부터 저장해야 합니다FragmentManager
.
이 문제를 어떻게 해결합니까?이 게시물에는 일반적인 해결 방법이 있습니다.
GitHub: https://github.com/shamanland/nested-fragment-issue
Android Navigation Component를 사용하는 사용자는 활동에서 를 사용해야 합니다.onActivityResult(...)
그자리의 primaryNavigationFragment
fragment를 합니다.fragment.onActivityResult(...)
.
의 앨범이 있습니다.onActivityResult(...)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent imageData)
{
super.onActivityResult(requestCode, resultCode, imageData);
for (Fragment fragment : getSupportFragmentManager().getPrimaryNavigationFragment().getChildFragmentManager().getFragments())
{
fragment.onActivityResult(requestCode, resultCode, imageData);
}
}
여러 중첩된 조각의 경우(예: 조각에서 ViewPager를 사용하는 경우)
주요 활동:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
조각에서:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
for (Fragment fragment : getChildFragmentManager().getFragments()) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
중첩된 조각에서
통화 활동
getParentFragment().startActivityForResult(intent, uniqueInstanceInt);
uniqueInstanceInt - 다른 fragment가 응답을 처리하지 않도록 중첩된 fragment 중에서 고유한 int로 대체합니다.
응답 수신
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == uniqueInstanceInt ) {
// TODO your code
}
}
주의
"RequestCode에 하위 16비트만 사용할 수 있습니다." 오류를 방지하려면 uniqueInt에 0에서 65536 사이의 숫자를 사용해야 합니다.
나는 또한 이 코드 블록을 프래그먼트 외부의 유틸리티 클래스로 이동했을 때 같은 문제에 직면했습니다.parentActivity
논쟁으로 통과되었습니다.
Intent intent = new Intent(parentActivity, CameraCaptureActivity.class);
parentActivity.startActivityForResult(intent,requestCode);
그 후에 저는 어떤 가치도 얻지 못했습니다.onActivityResult
그 프래그먼트의 방법, 그 후에, 나는 주장을 프래그먼트로 바꾸었고, 그래서 방법의 개정된 정의는 다음과 같이 보였습니다.
Intent intent = new Intent(fragment.getContext(), CameraCaptureActivity.class);
fragment.startActivityForResult(intent,requestCode);
그 후, 저는 가치를 얻을 수 있었습니다.onActivityResult
단편 위에
Mohit Mehta의 답변에 영감을 받아 Android Navigation Component를 사용하는 사람들을 위한 Kotlin 버전.
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
supportFragmentManager.primaryNavigationFragment?.childFragmentManager?.fragments?.forEach { fragment ->
fragment.onActivityResult(requestCode, resultCode, data)
}
}
만약 누군가가 여전히 그것을 할 수 없다면 나는 두 가지 조언을 추가할 수 있습니다.Manifest.xml 파일에서 콜백할 때 호스팅 작업이 완료되지 않았는지, 시작할 작업이 시작 모드를 표준으로 가지고 있는지 확인합니다.아래와 같이 세부 정보를 참조하십시오.
Hosting 활동의 경우 no history 속성이 있으면 false로 설정합니다.
android:noHistory="false"
시작할 활동에 대해 시작 모드를 표준으로 설정합니다.
android:launchMode="standard"
중첩된 조각의 경우(예: ViewPager를 사용하는 경우)
주요 활동:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
기본 최상위 조각(ViewPager 조각):
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
YourFragment frag = (YourFragment) getChildFragmentManager().getFragments().get(viewPager.getCurrentItem());
frag.yourMethod(data); // Method for callback in YourFragment
super.onActivityResult(requestCode, resultCode, data);
}
당신의 단편(내포된 단편)에서:
public void yourMethod(Intent data){
// Do whatever you want with your data
}
저는 또한 단편에서 이 문제를 만났습니다.그리고 전화했습니다.startActivityForResult
순식간에DialogFragment
.
하지만 이제 이 문제는 해결되었습니다.
FragmentClassname.this.startActivityForResult
.
저의 경우 안드로이드 버그였습니다(지원되는 제품을 사용하는 경우 http://technet.weblineindia.com/mobile/onactivityresult-not-getting-called-in-nested-fragments-android/), ).FragmentActivity
은 야합니다해사를 사용해야 .getSupportFragmentManager
에 getChildFragmentManager
:
List<Fragment> fragments = getSupportFragmentManager().getFragments();
if (fragments != null) {
for (Fragment fragment : fragments) {
if(fragment instanceof UserProfileFragment) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
}
요컨대,
조으로선니다합언각다니,▁declare▁in▁fragment합을 선언합니다.Fragment fragment = this
;
에는 그사후용을 합니다.fragment.startActivityForResult
.
결과는 작업 결과로 반환됩니다.
솔루션 1:
러startActivityForResult(intent, REQUEST_CODE);
에 getActivity().startActivityForResult(intent, REQUEST_CODE);
.
솔루션 2:
때startActivityForResult(intent, REQUEST_CODE);
의 라합니다고이활라고 .onActivityResult(requestCode,resultcode,intent)
호출되면 전화를 걸 수 있습니다.fragments onActivityResult()
여기서, 를 지나갑니다.
당신의 파편 안에서, 전화하세요.
this.startActivityForResult(intent, REQUEST_CODE);
this
@그렇지 않으면 @Clevester가 말한 대로 합니다.
Fragment fragment = this;
....
fragment.startActivityForResult(intent, REQUEST_CODE);
저도 전화를 해야 했습니다.
super.onActivityResult(requestCode, resultCode, data);
모부활동중에서.onActivityResult
효과가 있을 거예요
(@Clevester의 답변에서 이 답변을 수정했습니다.)
Android의 Navigation 구성 요소의 경우, 중첩된 Fragment가 있을 때 이 문제는 해결할 수 없는 미스터리처럼 느껴질 수 있습니다.
이 게시물의 다음 답변에서 얻은 지식과 영감을 바탕으로 효과적인 간단한 솔루션을 구성할 수 있었습니다.
onActivityResult()
당신은 당신이 사용하는 활성 프래그먼트 목록을 루프할 수 있습니다.FragmentManager
의getFragments()
방법.
이 작업을 수행하려면 다음을 사용해야 합니다.getSupportFragmentManager()
또는 API 26 이상을 대상으로 합니다.
하는 것은 각 하는 목록을 입니다.instanceof
.
하는 동안에Fragment
Component를 에 Android Navigation Component라는NavHostFragment
.
그럼 이제 어떻게 하죠?프래그먼트를 그들에게 알려야 합니다NavHostFragment
.NavHostFragment
그 자체가 파편입니다.그래서 사용하기getChildFragmentManager().getFragments()
우리는 다시 한 번 a를 얻습니다.List<Fragment>
우리에게 알려진 파편의.NavHostFragment
는 그 해서 확인합니다.instanceof
각 조각.
일단 우리가 관심의 조각을 목록에서 찾으면, 우리는 그것을 그것이라고 부릅니다.onActivityResult()
onActivityResult()
라고 선언합니다.
// Your activity's onActivityResult()
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
List<Fragment> lsActiveFragments = getSupportFragmentManager().getFragments();
for (Fragment fragmentActive : lsActiveFragments) {
if (fragmentActive instanceof NavHostFragment) {
List<Fragment> lsActiveSubFragments = fragmentActive.getChildFragmentManager().getFragments();
for (Fragment fragmentActiveSub : lsActiveSubFragments) {
if (fragmentActiveSub instanceof FragWeAreInterestedIn) {
fragmentActiveSub.onActivityResult(requestCode, resultCode, data);
}
}
}
}
}
이 대답들의 대부분은 계속해서 당신이 전화해야 한다고 말합니다.super.onActivityResult(...)
호트서에에서Activity
당신을 위하여Fragment
하지만 그것은 저에게 효과가 없는 것처럼 보였습니다.
에서.Activity
당신은 당신에게 전화해야 합니다.Fragments
onActivityResult(...)
.여기 예가 있습니다.
public class HostActivity extends Activity {
private MyFragment myFragment;
protected void onActivityResult(...) {
super.onActivityResult(...);
this.myFragment.onActivityResult(...);
}
}
당신의 어느 시점에서.HostActivity
은 할해야합다를 해야 할 입니다.this.myFragment
그자리의 Fragment
사용 중입니다.또는 다음을 사용합니다.FragmentManager
을 얻기 위해Fragment
그것에 대한 언급을 당신의 안에 두는 대신에.HostActivity
또한 다음 항목을 확인합니다.null
전화하기 전에this.myFragment.onActivityResult(...);
.
다른 답변에 아직 설명되지 않은 다른 사용 사례:
onActivityResult()
된 fragment는 fragment를 할 때 .exception.startResolutionForResult()
:
if (exception is ResolvableApiException) {
exception.startResolutionForResult(activity!!, MY_REQUEST_CODE)
}
이 이경대체로 합니다.exception.startResolutionForResult()
fragment 적으로편단▁.startIntentSenderForResult()
:
if (exception is ResolvableApiException) {
startIntentSenderForResult(exception.resolution.intentSender, MY_REQUEST_CODE, null, 0, 0, 0, null)
}
public class takeimage extends Fragment {
private Uri mImageCaptureUri;
private static final int PICK_FROM_CAMERA = 1;
private static final int PICK_FROM_FILE = 2;
private String mPath;
private ImageView mImageView;
Bitmap bitmap = null;
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.activity_send_image, container, false);
final String[] items = new String[] { "From Camera", "From SD Card" };
mImageView = (ImageView)view.findViewById(R.id.iv_pic);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.select_dialog_item, items);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Select Image");
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if (item == 0) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(), "tmp_avatar_"
+ String.valueOf(System.currentTimeMillis())
+ ".jpg");
mImageCaptureUri = Uri.fromFile(file);
try {
intent.putExtra(
android.provider.MediaStore.EXTRA_OUTPUT,
mImageCaptureUri);
intent.putExtra("return-data", true);
getActivity().startActivityForResult(intent,
PICK_FROM_CAMERA);
} catch (Exception e) {
e.printStackTrace();
}
dialog.cancel();
} else {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
getActivity().startActivityForResult(
Intent.createChooser(intent,
"Complete action using"), PICK_FROM_FILE);
}
}
});
final AlertDialog dialog = builder.create();
Button show = (Button) view.findViewById(R.id.btn_choose);
show.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Switch the tab content to display the list view.
dialog.show();
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK)
return;
if (requestCode == PICK_FROM_FILE) {
mImageCaptureUri = data.getData();
// mPath = getRealPathFromURI(mImageCaptureUri); //from Gallery
if (mPath == null)
mPath = mImageCaptureUri.getPath(); // from File Manager
if (mPath != null)
bitmap = BitmapFactory.decodeFile(mPath);
} else {
mPath = mImageCaptureUri.getPath();
bitmap = BitmapFactory.decodeFile(mPath);
}
mImageView.setImageBitmap(bitmap);
}
public String getRealPathFromURI(Uri contentUri) {
String [] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(contentUri, proj, null, null,null);
if (cursor == null) return null;
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}
기본 활동을 재정의할 수 있습니다.
onActivityResult
baseActivity.startActivityForResult
.기본 활동에서 인터페이스를 추가하고 활동 결과를 재정의합니다.
private OnBaseActivityResult baseActivityResult; public static final int BASE_RESULT_RCODE = 111; public interface OnBaseActivityResult{ void onBaseActivityResult(int requestCode, int resultCode, Intent data); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(getBaseActivityResult() !=null && requestCode == BASE_RESULT_RCODE){ getBaseActivityResult().onBaseActivityResult(requestCode, resultCode, data); setBaseActivityResult(null); }
Fragment는 단적인에대하를 합니다.
OnBaseActivityResult
@Override public void onBaseActivityResult(int requestCode, int resultCode, Intent data) { Log.d("RQ","OnBaseActivityResult"); if (data != null) { Log.d("RQ","OnBaseActivityResult + Data"); Bundle arguments = data.getExtras(); } }
이 해결 방법으로 해결할 수 있습니다.
Facebook 로그인 시 위의 문제가 발생하면 다음과 같은 fragment의 부모 활동에 아래 코드를 사용할 수 있습니다.
Fragment fragment = getFragmentManager().findFragmentById(android.R.id.tabcontent);
fragment.onActivityResult(requestCode, resultCode, data);
또는:
Fragment fragment = getFragmentManager().findFragmentById("fragment id here");
fragment.onActivityResult(requestCode, resultCode, data);
그리고 당신의 단편에 아래의 호출을 추가합니다.
callbackManager.onActivityResult(requestCode, resultCode, data);
Kotlin 버전(활동 결과())
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
//add following lines in your activity
if(supportFragmentManager?.fragments!=null && supportFragmentManager?.fragments!!.size>0)
for (i in 0..supportFragmentManager?.fragments!!.size-1) {
val fragment= supportFragmentManager?.fragments!!.get(i)
fragment.onActivityResult(requestCode, resultCode, data)
}
}
추가할 내용
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 1);
}
당신이 당신의 코드를 위의 코드로 대체할 때 자동으로 당신의 이것.
public void onActivityResult(int requestCode, int resultCode,
@Nullable Intent data){}
메서드가 작동을 시작합니다.
//No Need to write this code in onclick method
Intent intent=new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT)
startActivityForResult(intent,1);
Toast.makeText(getContext(), "image"+intent, Toast.LENGTH_SHORT).show();
@Mohit @ Mehta의 도움을 Mehta를 합니다.Navigation Component
이것은 당신에게도 도움이 될 것입니다.제게 효과가 있었습니다.
onActivityResult
의 MainActivity
코드 아래에 붙여넣기:
for (Fragment fragment : navHostFragment.getChildFragmentManager().getFragments()){
if (fragment != null){
Log.d(TAG, "onResult Has Been Sent!");
fragment.onActivityResult(requestCode, resultCode, data);
}
}
그고리로.onActivityResult
의 YOUR FRAGMENT
당신은 결과를 얻을 수 있습니다.이것이 도움이 되길 바랍니다.
우선 활동에서 이 코드를 재정의해야 합니다.
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
그리고 나서, 당신의 단편에서
startActivityForResult(intent,GALLERY_REQUEST_CODE);
그리고 당신의 단편에서보다 더,
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result code is RESULT_OK only if the user selects an Image
if (resultCode == Activity.RESULT_OK) {
}
}
Olie C가 언급했듯이, 중첩된 조각을 사용할 때 onActivityResult에 반환된 값을 사용하는 지원 라이브러리에 대한 활성 버그가 있습니다.방금 쳤어요 :-(
requestCode != 0일 때 Fragment.onActivityResult가 호출되지 않음을 참조하십시오.
저는 여기에 있는 모든 답들이 해킹에 지나지 않는다는 강한 의심을 가지고 있습니다.저는 그것들을 모두 시도해보았지만, 항상 어리석은 문제가 있기 때문에 신뢰할 수 있는 결론은 얻지 못했습니다.나로서는 일관성 없는 결과에 의존할 수 없습니다.Fragments의 공식 Android API 문서를 보면 Google은 다음과 같이 명시되어 있습니다.
조각에 포함된 활동에서 결과에 대한 시작 활동(Intent, int)을 호출합니다.
참조: Android Fragment API
따라서 호스팅 활동에서 startActivityForResult()를 실제로 호출하고 여기서 ActivityResult()에 대한 결과를 처리하는 것이 가장 올바르고 신뢰할 수 있는 접근 방식인 것 같습니다.
코드에 중첩된 조각이 있습니다.super.on ActivityForResult 호출이 작동하지 않음
조각을 호출할 수 있는 모든 활동을 수정하거나 조각 체인의 모든 조각을 호출하는 작업을 수행할 수 없습니다.
다음은 작동하는 많은 솔루션 중 하나입니다.즉시 조각을 만들어 지원 조각 관리자와 함께 활동에 직접 연결합니다.그런 다음 새로 만든 조각에서 startActivityForResult를 호출합니다.
private void get_UserEmail() {
if (view == null) {
return;
}
((TextView) view.findViewById(R.id.tvApplicationUserName))
.setText("Searching device for user accounts...");
final FragmentManager fragManager = getActivity().getSupportFragmentManager();
Fragment f = new Fragment() {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
startActivityForResult(AccountPicker.newChooseAccountIntent(null, null,
new String[]{"com.google"}, false, null, null, null, null), REQUEST_CODE_PICK_ACCOUNT);
}
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == REQUEST_CODE_PICK_ACCOUNT) {
String mEmail = "";
if (resultCode == Activity.RESULT_OK) {
if (data.hasExtra(AccountManager.KEY_ACCOUNT_NAME)) {
mEmail = data
.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
}
}
if (mActivity != null) {
GoPreferences.putString(mActivity, SettingApplication.USER_EMAIL, mEmail);
}
doUser();
}
super.onActivityResult(requestCode, resultCode, data);
fragManager.beginTransaction().remove(this).commit();
}
};
FragmentTransaction fragmentTransaction = fragManager
.beginTransaction();
fragmentTransaction.add(f, "xx" + REQUEST_CODE_PICK_ACCOUNT);
fragmentTransaction.commit();
}
언급URL : https://stackoverflow.com/questions/6147884/onactivityresult-is-not-being-called-in-fragment
'programing' 카테고리의 다른 글
종료 메시지 작성 방법 (0) | 2023.06.05 |
---|---|
루비의 문자열 이름으로 클래스 인스턴스를 만들려면 어떻게 해야 합니까? (0) | 2023.06.05 |
날짜당 여러 개가 존재하는 경우 개최되는 레슨/이벤트 수를 보다 간결하게 계산하는 방법 (0) | 2023.06.05 |
행 이름을 첫 번째 열로 변환하려면 어떻게 해야 합니까? (0) | 2023.06.05 |
파이어베이스:프로덕션 APN 인증서를 업로드할 수 없습니다. (0) | 2023.06.05 |