Search code examples
androidandroid-intentandroid-activityonactivityresult

onActivityResult() not being called in activity


I have looked at several examples and I cant find what I am doing wrong.

my onActivityResult() method is not being called on my activity;

TransactionFormActivity is starting up a new activity called VehicleSearchActivity which has a customListAdapter.when I click on an item in that adapter I want to pass a value back to the TransactionFormActivity.

here is the code from my two activities:

Code in Custom List Adapter onClick()

convertView.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
         Intent i = new Intent(context, TransactionFormActivity.class);
         i.putExtra("VehicleId", rowItem.VehicleId);
         i.putExtra("VehicleReg", rowItem.Registration);
         context.startActivityForResult(i,0);           
         context.finish();
    }
}

and here is the code in The TransactionFormActivity

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            vehicleId = data.getIntExtra("VehicleId", 0);
            vehicleReg.setText(data.getStringExtra("VehcilceReg"));
        }
    }
}

When I debug and put break points, my code in the onClickListener is being run. However the app returns to the TransactionFormActivty and the OnActivityResult() method is never called?

What could I be doing wrong.


Solution

  • You are doing it a little wrong..

    In your FirstActivity you should call:

    //your code...
    Intent i = new Intent(this, SecondActivity.class);
    startActivityForResult(i, 1);
    

    In your SecondActivity you should call:

    Intent returnIntent = new Intent();
    returnIntent.putExtra("result",result);
    setResult(RESULT_OK,returnIntent);
    finish();
    

    and then back in your FirstActivity you use the onActivityResult to get the data back

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
        if (requestCode == 1) {
            if(resultCode == RESULT_OK){
                String result=data.getStringExtra("result");
            }
            if (resultCode == RESULT_CANCELED) {
                //Write your code if there's no result
            }
        }
    }