질문이 약간 명확하지 않습니다.질문의 내용에 있는 레이아웃은 액티비티나 프레그먼트로 보이네요. 레이아웃은 화면은 디자인할 때 사용하는 XML파일일 뿐 화면단위와는 상관이 없습니다.
액티비티를 사용하느냐 프레그먼트를 사용하느냐에 따라 답이 달라지게 됩니다. 액티비티를 기준으로 말씀드리면, A에서 B를 호출할 때 startActivtiyForResult를 사용하여 모달방식(B에서 값을 전달받을 수 있는 형태)으로 띄워줍니다.
// A
private static final int REQUEST_CODE = 1000; //아무 int값이나 사용할 수 있음.
Intent intent = new Intent(A.this, B.class);
startActivityForResult(intent , REQUEST_CODE);
A에서는 B에서 값을 받을 때 onActivityResult라는 콜백을 이용해서 처리하게 됩니다.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
setButtonEnabled(resultCode != RESULT_OK);
}
}
B에서는 입력이 끝나면 처리가 되었음을 저장한 후 종료합니다.
//B
setResult(RESULT_OK);
finish();
참고로 최근에 이 방식은 deprecated가 되었고 새로운 API가 도입이 되었습니다. 이 부분은 개발자 문서를 통해 확인하시기 바랍니다.
https://developer.android.com/training/basics/intents/result
public class GetResult extends ActivityResultContract<Void, Boolean> {
@NonNull
@Override
public Intent createIntent(@NonNull Context context, @NonNull Void input) {
return new Intent(context, B.class);
}
@Override
public Boolean parseResult(int resultCode, @Nullable Intent result) {
return resultCode == Activity.RESULT_OK;
}
}
// B
ActivityResultLauncher<Void> mGetResult = registerForActivityResult(new GetResult(),
new ActivityResultCallback<Boolean>() {
@Override
public void onActivityResult(Boolean isOk) {
setButtonEnabled(!isOk);
}
});
@Override
public void onCreate(@Nullable savedInstanceState: Bundle) {
// ...
Button selectButton = findViewById(R.id.select_button)
selectButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mGetResult.launch(null);
}
});
}