gpt4 book ai didi

Android 你能从链式 startActivityForResult 获得 Activity 结果吗

转载 作者:太空宇宙 更新时间:2023-11-03 11:28:12 27 4
gpt4 key购买 nike

我有以下 Activity 屏幕

Activity A - 包含一个链接到 Activity B 的按钮

Activity B - 包含订单确认,然后是打开 Activity C(以捕获签名)的“下一步”按钮

Activity C - 弹出一个对话框供用户输入他们的签名和一个完成按钮。

Activity A - 包含启动 Activity B 的 Intent 开始并实现 onActivityForResult

Intent intent = new Intent( this, ConfirmLines.class );
startActivityForResult( intent, GET_SIGNATURE );

protected void onActivityResult( int requestCode, int resultCode, Intent intent )
{
super.onActivityResult( requestCode, resultCode, intent );
switch ( requestCode )
{
case GET_SIGNATURE:
if ( resultCode == RESULT_OK )
{
getIntent().putExtra( SIGNATURE_DATA, intent.getStringExtra( SignatureCapture.SIGNATURE_RESULT ) );
getIntent().putExtra( SIGNATURE_TIME, "34552655544" ); // todo - remove hardcoded signature time
showDialog( PRINT_NAME );
}
else
{
//reset data after a cancel/back from signature screen
getIntent().putExtra( SignatureCapture.SIGNATURE_RESULT, "" );
}
break;
}
}

Activity B - 包含启动签名捕获 Intent 的代码以及返回 Activity A 的 onActivityForResult。

final Intent intent = new Intent( this, SignatureCapture.class );
startActivityForResult( intent, GET_SIGNATURE );
@Override
protected void onActivityResult( int requestCode, int resultCode, Intent intent )
{
super.onActivityResult( requestCode, resultCode, intent );

switch ( requestCode )
{
case GET_SIGNATURE:
if ( resultCode == RESULT_OK )
{
finish();
}
}
}

Activity C - 包含签名捕获代码和一个完成按钮

public void onClick( View view )
{
switch ( view.getId() )
{
case R.id.button_cancel:
dismiss();
nameValue.setText( "" );
notesValue.setText( "" );
imageView_button.setImageBitmap( null );
break;
case R.id.button_confirm:
final String printedText = String.valueOf( nameValue.getText() );
if ( printedText.isEmpty() )
{
Toast.makeText( getContext(), "Please enter a name", Toast.LENGTH_SHORT ).show();
}
else
{
if ( mDialogResult != null )
{
mDialogResult.finish( String.valueOf( nameValue.getText() ), String.valueOf( notesValue.getText() ) );
}
nameValue.setText( "" );
notesValue.setText( "" );
dismiss();
}
break;
}
}

当我返回 Activity A 时,我卡住了,resultCode 等于 0,这被定义为结果被取消。

它正在拾取最初从 Activity A 开始的正确的 requestCode,但似乎只是这个 resultCode 才是问题所在,如果有人能看出原因吗?

这可能与从 Activity C 返回时从 Activity B 调用 finish() 有关吗?

此外,我需要将 Intent 数据从 Activity C 传递到 A。如果我为 Activity A 启动 Activity,那么我在 Activity B 中有 finish(),它不会落入 onActivityForResult。

感谢高级帮助:]

最佳答案

如果你想从 Activity C 中获取返回给 Activity A 的结果:

从 Activity A 启动 Activity B:

Intent showB = new Intent(ActivityA, ActivityB); 
startActivityForResult(showB, RequestCode);

在 Activity B 中调用 C:

Intent showC = new Intent(ActivityC);
showC.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(showC);
finish(); //Close Activity B

在 C 中:

//set the result code and close the activity
Intent result = new Intent();
setResult(resultCode, result);//like RESULT_OK
finish();

在 A 中:

public void onActivityResult(int requestCode, int resultCode, Intent data) {

...... handle RequestCode here
}

关于Android 你能从链式 startActivityForResult 获得 Activity 结果吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772284/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com