简体   繁体   中英

multiple Onactivityresult method in Android

I added onClick() button in fragment to display the result. I also added onActivityResult() method in MyActivity . I want to add onClick() button in more fragments and also show results.

In that case how I should write multiple onActivityResult() method in activity?

Below is my code for OnActivityResultmethod :

    button = (Button) view.findViewById(R.id.zing);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());
            scanIntegrator.initiateScan();

        }


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

      if (resultCode == RESULT_OK) {
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, 
     data);
Fragment fragment = this.getFragmentManager().findFragmentById(R.id.total_frame_content);
           if (fragment instanceof CustomerIdFragment) {
               if (scanResult != null) {
                   if (scanResult.getContents() == null) {
                       Toast.makeText(this, "Cancelled", Toast.LENGTH_SHORT).show();

                   } else {

                       //String customerSno = scanResult.getContents().substring(0, 10),
                       //       passCode = scanResult.getContents().substring(10, 14);
        Toast.makeText(this, " " + scanResult.getContents(), Toast.LENGTH_SHORT).show();
                     //  System.out.println("Result" + scanResult.getContents());

                   }
               }

           }
       }

Try This u can not overide method multiple time so u pas int value

  startActivityForResult(intent,1);

in on activity result

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

    if(requestCode == 1){

        if(resultCode == RESULT_OK){
        //do somthing
        }

    }

    if(requestCode == 2){

        if(resultCode == RESULT_OK){
                //do somthing
        }

    }

    if(requestCode == 3){

        if(resultCode == RESULT_OK){
            //do somthing
        }

    }

}

Edited Answer In Your Fragment java File

 private int PICK_IMAGE_REQUEST_CODE = 1;
btChoseFile = (Button)view.findViewById(R.id.btChoseFile);

    btStar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intent = new Intent();
            intent.setType("*/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST_CODE);

        }
    });




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

        if(requestCode == PICK_IMAGE_REQUEST_CODE){
            Toast.makeText(getActivity(),"On Activity Result in fragment",Toast.LENGTH_LONG).show();
        }
    }

You just need to use switch case for that like below:

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            try {
                switch (requestCode) {
                    case REQUEST_CODE_CAPTURE_IMAGE:

                        if (requestCode == REQUEST_CODE_CAPTURE_IMAGE && resultCode == Activity.RESULT_OK ) {

                         //your code

                        break;
                    case PHOTO_PICKER_ID:
                        if (requestCode == PHOTO_PICKER_ID && resultCode == Activity.RESULT_OK && null != data) {
                           //your code
                        }

                        break;
                }
            } catch (Exception e)
            {
                Log.d("krvrrusbviuritiribtr", e.getMessage());
            }
        }

When you call startActivityForResult(intent,requestCode); , you just need to use different requestCode. This number will be send to the onActivityResult(requestCode, resultCode, intent)

Create some constants for the request in your activity (call it MyActivity).

public class MyActivity{
    private static final int REQUEST_ONE = 1;
    private static final int REQUEST_TWO = 2;

    ...

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {  
    //Management of the result, see below
    }
}

Use the constant corresponding to the request calling.

//startActivityForResult(intent,REQUEST_CODE);

In you first fragment, you will use

public void clickButton(View v){
    startActivityForResult(intent,MyActivity.REQUEST_ONE);
}

In the second fragment, you will use

public void clickButton(View v){
    startActivityForResult(intent,MyActivity.REQUEST_TWO);
}

Then you just need to implements the result method in the activity to take care of the requestCode value to execute the correct code. Using a switch or if else conditions. There are more possibilities (using some pattern) but the easiest are those.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {  
    if(requestCode == REQUEST_ONE){
        // the code for request one
    } else if(requestCode == REQUEST_TWO){
        // the code for request two
    } else {
        super.onActivityResult(requestCode, resultCode, intent);
    }
}

or with a switch

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

    switch(requestCode)
    case REQUEST_ONE:
        // the code for request one
        break;
    case REQUEST_TWO:
        // the code for request two
        break;
    default:
        super.onActivityResult(requestCode, resultCode, intent);
    }
}

If you have too much request, create one method for each requests, this will keep the result method more readable.

我遇到了同样的问题,当我覆盖 onactivity 时,我正在与 facebook 进行 googele 集成

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM