onActivityResult() not being called in activity

2020-02-15 08:49发布

问题:

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.

回答1:

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
        }
    }
}


回答2:

As i don't have reputation to comment, so just want to make sure you don't have

android:launchMode="singleInstance"

in manifest or equivalent argument to create a intent.



回答3:

You should override onActivityResult in the calling Activity not in TransactionFormActivity