【发布时间】:2013-11-21 07:02:42
【问题描述】:
我想在其他活动中从mainactivity 调用一个方法。为此,我进行了很多研究,发现使用OnActivityResult 是最好的选择。谁能在示例的帮助下解释如何使用此方法?我经历过类似的问题,但发现它们令人困惑。
谢谢!
编辑:我的应用中有一个自定义对话框活动。它询问用户是否要开始新游戏,它有两个按钮是和否。我想实现上述方法只是为了获得按下的按钮。
【问题讨论】:
标签: android
我想在其他活动中从mainactivity 调用一个方法。为此,我进行了很多研究,发现使用OnActivityResult 是最好的选择。谁能在示例的帮助下解释如何使用此方法?我经历过类似的问题,但发现它们令人困惑。
谢谢!
编辑:我的应用中有一个自定义对话框活动。它询问用户是否要开始新游戏,它有两个按钮是和否。我想实现上述方法只是为了获得按下的按钮。
【问题讨论】:
标签: android
定义常量
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();
【讨论】:
您确实需要将一个额外的整数参数传递给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();
}
}
}
【讨论】:
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);
}
}
【讨论】:
这是我的例子。
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();
}
}
}
【讨论】: