【问题标题】:Use onactivityresult android使用onactivityresult android
【发布时间】:2013-11-21 07:02:42
【问题描述】:

我想在其他活动中从mainactivity 调用一个方法。为此,我进行了很多研究,发现使用OnActivityResult 是最好的选择。谁能在示例的帮助下解释如何使用此方法?我经历过类似的问题,但发现它们令人困惑。 谢谢!

编辑:我的应用中有一个自定义对话框活动。它询问用户是否要开始新游戏,它有两个按钮是和否。我想实现上述方法只是为了获得按下的按钮。

【问题讨论】:

    标签: android


    【解决方案1】:

    定义常量

    public static final int REQUEST_CODE = 1;
    

    使用意图调用您的自定义对话框活动

    Intent intent = new Intent(Activity.this,
                        CustomDialogActivity.class);
                startActivityForResult(intent , REQUEST_CODE);
    

    现在使用 onActivityResult 检索结果

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            try {
                super.onActivityResult(requestCode, resultCode, data);
    
                if (requestCode == REQUEST_CODE  && resultCode  == RESULT_OK) {
    
                    String requiredValue = data.getStringExtra("key");
                }
            } catch (Exception ex) {
                Toast.makeText(Activity.this, ex.toString(),
                        Toast.LENGTH_SHORT).show();
            }
    
        }
    

    在自定义对话框活动中使用此代码设置结果

    Intent intent = getIntent();
    intent.putExtra("key", value);
    setResult(RESULT_OK, intent);
    finish();
    

    【讨论】:

    • 我应该在自定义对话框中使用什么?
    • 如果一切顺利,我们将 requestCode 设置为 1,然后 RESULT_OK 将为 1,因此在 activityResult 我们可以检查 if(requestCode == RESULT_OK)。对于设置结果,我们在自定义对话框活动中使用了 setResult。如上所述,我们可以将一些数据与键值对放在一起。要在 onActivityResult 中获取该数据,请使用该键名来检索其值。
    【解决方案2】:

    开始活动:

    您确实需要将一个额外的整数参数传递给startActivityForResult() 方法。您可以通过定义一个常量或简单地输入一个整数来实现。整数参数是一个标识您的请求的“请求代码”。当您收到结果 Intent 时,回调会提供相同的请求代码,以便您的应用可以正确识别结果并确定如何处理。

    static final int ASK_QUESTION_REQUEST = 1;
    // Create an Intent to start SecondActivity
    Intent askIntent = new Intent(FirstActivity.this, SecondActivity.class);
    
    // Start SecondActivity with the request code
    startActivityForResult(askIntent, ASK_QUESTION_REQUEST);
    

    返回结果:

    在第二个活动类中完成您的工作后,只需设置结果并调用该活动的来源,最后不要忘记编写finish() 语句。

    // Add the required data to be returned to the FirstActivity
                sendIntent.putExtra(Result_DATA, "Your Data");
    
                // Set the resultCode to Activity.RESULT_OK to
                // indicate a success and attach the Intent
                // which contains our result data
                setResult(RESULT_OK, sendIntent);
    
                // With finish() we close the SecondActivity to
                // return to FirstActivity
                finish();
    

    收到结果:

    当您完成后续活动并返回时,系统会调用您的活动的onActivityResult() 方法。该方法包含三个参数:

    @您传递给startActivityForResult()的请求代码。 @第二个活动指定的结果代码。如果操作成功,则为 RESULT_OK;如果操作失败,则为 RESULT_CANCELED @一个携带结果数据的Intent。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        // check if the request code is same as what is passed  here it is 1
        if (requestCode == ASK_QUESTION_REQUEST) {
            // Make sure the request was successful
            if (resultCode == RESULT_OK) {
                final String result = data.getStringExtra(SecondActivity.Result_DATA);
    
                // Use the data - in this case display it in a Toast.
                Toast.makeText(this, "Result: " + result, Toast.LENGTH_LONG).show();
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      1.在您的 FirstActivity 类中编写以下代码,以使用 Intent 移动到第二个活动。

      Intent i = new Intent(this, SecondActivity.class);
      startActivityForResult(i, 100);
      

      2.在您的 secondActivity 类中为 onClick 事件编写以下代码 例如:在 secondActivity 如果你想发回数据:

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

      3.现在在您的 FirstActivity 类中为 onActivityResult() 方法编写以下代码。

      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) 
      {
          if (requestCode == 100 && resultCode == Activity.RESULT_OK){
                  String result=data.getStringExtra("result");
                  Log.e("Result",result);
          }
      }
      

      【讨论】:

        【解决方案4】:

        这是我的例子。

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        
                super.onActivityResult(requestCode, resultCode, data);
        
                if (requestCode == Image_Request_Code && resultCode ==RESULT_OK && data != null && data.getData() != null) {
        
                    FilePathUri = data.getData();
        
                    try {
        
                        // Getting selected image into Bitmap.
                        Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), FilePathUri);
        
                        // Setting up bitmap selected image into ImageView.
                        SelectImage.setImageBitmap(bitmap);
        
                        // After selecting image change choose button above text.
                        ChooseButton.setText("Image Selected");
        
                    }
                    catch (IOException e) {
        
                        e.printStackTrace();
                    }
                }*strong text*
        

        【讨论】:

          【解决方案5】:
           if (requestCode == 2000)
              {
                  if (resultCode == Activity.RESULT_OK)
                  {
                      try {
          
                          Uri selectedImages = data.getData();
                          String[] filePathColumn = { MediaStore.Images.Media.DATA };
          
                          Cursor cursor = getActivity().getContentResolver().query(selectedImages,
                                  filePathColumn,null,null,null);
                          cursor.moveToFirst();
                          int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                          String picturePath = cursor.getString(columnIndex);
                          cursor.close();
          
                          receivedImageBitmap = BitmapFactory.decodeFile(picturePath);
                          imageView.setImageBitmap(receivedImageBitmap);
          
                      }
                      catch (Exception e)
                      {
                          Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                      }
                  }
              }
          

          【讨论】:

            猜你喜欢
            • 2013-05-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多