Frendi
Frendi

Reputation: 151

resultCode 0 and data zero in onActivityResult

I have activity with one fragment, and then that fragment call some activity which that activity will give some value into first activity. i use onActivityResult but i don't know why resultCode always 0 and data always zero,.

on Activity One i have

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d(TAG, "onActivityResult: "+ requestCode +" "+resultCode+" "+data);

}

Activity one have some fragmentX which call activity two

private final int REQUEST_CODE = 10;
private void start (){
    Intent intent = new Intent(getContext(),Main2Activity.class);
        intent.putExtra("xxx","test1");
        getActivity().startActivityForResult(intent,REQUEST_CODE);
}

then in Activity Two, when i touch onBackpress, will pass some value.

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent intent = getIntent().putExtra("yyy","test2");
        setResult(RESULT_OK,intent);
    }
}

but, i don't know why, onActivityResult i can't get the data. my final purpose is, i want to setArgument that data to fragmentX.

Upvotes: 3

Views: 3126

Answers (4)

Hardik Hirpara
Hardik Hirpara

Reputation: 3046

if you wants to send return data in onActivityResult then you should use super.onBackPressed() after data set in setResult() method

example:

@Override
public void onBackPressed() {
    val intent = Intent()
    intent.putExtra("IsReturnData", true)
    setResult(RESULT_OK,intent);
    super.onBackPressed();  //write this line at the end of method
}

Upvotes: 0

Lokesh Desai
Lokesh Desai

Reputation: 2677

For start new activity

private final int REQUEST_CODE = 10;
private void start (){
    Intent intent = new Intent(getContext(),Main2Activity.class);
        intent.putExtra("xxx","test1");
        getActivity().startActivityForResult(intent,REQUEST_CODE);
}

From Second activity

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent intent = getIntent().putExtra("yyy","test2");
        setResult(10,intent);
    }
}

you have to set the integer code using which you have started second activity. you have started second activity with the code "10".so use the same value when you setResult(10,intent);

onActivityResult you need to check Request code

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==10){
        if(data!=null)
        {
       //you have to manage your own list of fragments for activity because getSupportFragmentManager().getFragments() is deprecated now.

    //Send data to fragments
    if (arrayFragments != null) {
        for (Fragment fragment : arrayFragments) {
            fragment.onActivityResult(requestCode, resultCode, data);
        }
    }
 }
   }

}

Remember you have to manage your own list of fragments using ArrayList or HashMap. Hope this will help you if you need any other help inform me.

Upvotes: 0

Rajasekhar Reddy
Rajasekhar Reddy

Reputation: 159

In first activity write the below code:

1st method:

@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);
    }
}

In Fragment

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // In fragment write your logic here
}

2nd method: (I didn't try but as per doc may be this is one of the reason try once) if it will not work go 1st method its 100 percent solution

Here when your calling second activity using getContext()

getContext() - Returns the context view only current running activity.

getActivity()- Return the Activity this fragment is currently associated with.

Try instead of getContext() use getActivity() when you calling intent to next activity

Ex:

private final int REQUEST_CODE = 10;
Intent intent = new Intent(getActivity(),Main2Activity.class);
intent.putExtra("xxx","test1");
getActivity().startActivityForResult(intent,REQUEST_CODE);

Upvotes: 0

KeLiuyue
KeLiuyue

Reputation: 8237

1.You can call onActivityResult in the fragment

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d(TAG, "onActivityResult: "+ requestCode +" "+resultCode+" "+data);

}

2.Use super.onBackPressed(); after setResult in your method

@Override
public void onBackPressed() {

    Intent intent = getIntent().putExtra("yyy","test2");
    setResult(RESULT_OK,intent);
    super.onBackPressed();
}

Upvotes: 2

Related Questions