programing

조각 및 마무리 하위 활동의 ​​startActivityForResult ()는 조각에서 onActivityResult ()를 호출하지 않습니다.

new-time 2020. 6. 2. 22:26
반응형

조각 및 마무리 하위 활동의 ​​startActivityForResult ()는 조각에서 onActivityResult ()를 호출하지 않습니다.


FirstActivity.Java

가지고

FragmentA.Java

있는 전화

startActivityForResult()

.

SecondActivity.Java

호출

finish()

하지만

onActivityResult

결코 호출 되지 않습니다

FragmentA.Java

.

FragmentA.Java

암호:

  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    // some code
    Intent i = new Intent(getActivity(), SecondActivity.class);
    i.putExtra("helloString", helloString);
    getActivity().startActivityForResult(i, 1);
  }

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    getActivity();
    if(requestCode == 1 && resultCode == Activity.RESULT_OK) {
       //some code
    }
  }

SecondActivity.Java

암호:

  @Override
  protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       //some code
       Intent returnIntent = new Intent();
       returnIntent.putExtra("result", result);                          

       setResult(Activity.RESULT_OK,returnIntent);     
       finish();
  }

코드 디버깅을 시도했지만

onAcitvityResult()

호출되지 않습니다.


당신은 작성해야합니다

onActivityResult()

귀하의에

FirstActivity.Java

로 다음과

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

그래서 이것은 당신의 조각을 호출합니다

onActivityResult()

편집 :

이 솔루션은 대체하는 것입니다

getActivity().startActivityForResult(i, 1);

함께

startActivityForResult(i, 1);


Kevin의 답변은 효과가 있지만 해당 솔루션을 사용하여 데이터를 재생하기가 어렵습니다.최상의 솔루션은

startActivityForResult()

활동 수준에서 시작되지 않습니다 .당신의 경우에는 전화하지 마십시오

getActivity().startActivityForResult(i, 1);

대신, 그냥 사용

startActivityForResult()

하면 완벽하게 작동합니다! :)


FirstActivity.Java에 onActivityResult ()를 다음과 같이 작성해야합니다.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    for (Fragment fragment : getSupportFragmentManager().getFragments()) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}

그러면 FirstActivity.java에서 조각의 onActivityResult 메소드가 트리거됩니다.


프래그먼트에는 이미 , 대신 사용하는 경우 프래그먼트를

startActivityForResult

호출

onActivityResult

합니다

getActivity()

...


가장 중요한 것은 여기에 모든 것이 빠져 있다는 것입니다. FirstActivity의 launchMode는 singleTop이어야합니다. singleInstance 인 경우 startActivityForResult 메서드를 호출 한 직후 FragmentA의 onActivityResult가 호출됩니다. 따라서 SecondActivity에서 finish () 메소드 호출을 기다리지 않습니다.다음 단계를 수행하십시오. 오랫동안 연구 한 후에도 효과가 있습니다.AndroidManifest.xml 파일에서 FirstActivity.Java의 launchMode를 singleTop으로 작성하십시오.

<activity
        android:name=".FirstActivity"
        android:label="@string/title_activity_main"
        android:launchMode="singleTop"
        android:theme="@style/AppTheme.NoActionBar" />

In FirstActivity.java, override onActivityResult method. As this will call the onActivityResult of FragmentA.

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

In FragmentA.Java, override onActivityResult method

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d("FragmentA.java","onActivityResult called");
}

Call startActivityForResult(intent, HOMEWORK_POST_ACTIVITY); from FragmentA.Java

Call finish(); method in SecondActivity.java

Hope this will work.


We could call startActivityForResult() directly from Fragment So You should call this.startActivityForResult(i, 1); instead of getActivity().startActivityForResult(i, 1);

Intent i = new Intent(getActivity(), SecondActivity.class);
i.putExtra("helloString", helloString);
this.startActivityForResult(i, 1);

Activity will send the Activity Result to your Fragment.


onActivityResult() of MAinActivity will call , onActivityResult() of Fragement wont call because fragment is placed in Activity so obviously it come back to MainActivity


May it's late for the answer. But will be helpful for anyone.

In My case want to call activity from Fragment and setResult back from the fragment.

I have used getContext of Fragment Like.

startActivityForResult(new Intent(getContext(), NextActivity.class), 111);

And Set Result from Fragment

getActivity().setResult(Activity.RESULT_OK);
                    getActivity().finish();

Now Getting Result to Fragment with

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK && requestCode == 111) {

    }
}

Don't call finish() in onCreate() method then it works fine.


call your onActivityresult() in ParentActivity .

참고URL : https://stackoverflow.com/questions/17085729/startactivityforresult-from-a-fragment-and-finishing-child-activity-doesnt-c

반응형