繁体   English   中英

Android中的多个Onactivityresult方法

[英]multiple Onactivityresult method in Android

我在片段中添加了onClick()按钮来显示结果。 我还在MyActivity添加了onActivityResult()方法。 我想在更多片段中添加onClick()按钮并显示结果。

在那种情况下,我应该如何在活动中编写多个onActivityResult()方法?

下面是我的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());

                   }
               }

           }
       }

尝试此操作您无法多次覆盖方法,因此您的int值

  startActivityForResult(intent,1);

在活动结果中

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

    }

}

片段Java文件中的 编辑答案

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

您只需要使用switch盒即可,如下所示:

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

当您调用startActivityForResult(intent,requestCode); ,您只需要使用其他requestCode。 该数字将发送到onActivityResult(requestCode,resultCode,intent)

为您的活动中的请求创建一些常量(称为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
    }
}

使用与请求调用相对应的常量。

//startActivityForResult(intent,REQUEST_CODE);

在第一个片段中,您将使用

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

在第二个片段中,您将使用

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

然后,您只需要在活动中实现result方法即可处理requestCode值以执行正确的代码。 使用开关或其他条件。 有更多的可能性(使用某种模式),但是最简单的是那些。

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

或带开关

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

如果请求太多,请为每个请求创建一个方法,这将使结果方法更具可读性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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