使用onactivityresult android

使用onactivityresult android,android,Android,我想从其他活动中的mainactivity调用一个方法。为此,我做了大量研究,发现使用OnActivityResult是最好的选择。有人能举例说明如何使用这种方法吗?我也问过类似的问题,但发现它们令人困惑。 谢谢 编辑:我的应用程序中有一个自定义对话框活动。它询问用户是否想要开始一个新游戏,它有两个按钮yes和no。我只想实现上面的方法来获得按下的按钮 定义常数 public static final int REQUEST_CODE = 1; 使用intent调用自定义对话框活动 Inten

我想从其他活动中的
mainactivity
调用一个方法。为此,我做了大量研究,发现使用
OnActivityResult
是最好的选择。有人能举例说明如何使用这种方法吗?我也问过类似的问题,但发现它们令人困惑。 谢谢

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

定义常数

public static final int REQUEST_CODE = 1;
使用intent调用自定义对话框活动

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();
开始活动: 您确实需要将一个额外的整数参数传递给
startActivityForResult()
方法。您可以通过定义一个常量或简单地输入一个整数来完成此操作。整数参数是标识请求的“请求代码”。当您收到结果意图时,回调将提供相同的请求代码,以便您的应用程序能够正确识别结果并确定如何处理它

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);
返回结果: 在第二个activity类中完成工作后,只需设置结果并调用该活动,最后不要忘记编写
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\u OK
;如果操作失败,则为
RESULT\u cancelled
@携带结果数据的意图

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

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

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 100);
2.在第二个Activity类中,为onClick事件编写以下代码 例如:在secondActivity中,如果要发回数据:

Intent intent= new Intent();
intent.putExtra("result",result);
setResult(RESULT_OK,intent);
finish();
3.现在在第一个Activity类中为onActivityResult()方法编写以下代码

这是我的例子

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*

我应该在我的自定义对话框中使用什么?我们已经将requestCode设置为1,如果一切顺利,那么RESULT\u OK将为1,因此在activityResult中,我们可以检查(requestCode==RESULT\u OK)。对于设置结果,我们在自定义对话框活动中使用了setResult。我们可以将一些数据与上面提到的键值对放在一起。要在onActivityResult中获取该数据,请使用该键名检索其值。
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*
 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();
            }
        }
    }