Android 는 startActivity ForResult 를 이용 하여 이전 Activity 로 데 이 터 를 되 돌려 줍 니 다.
실현 하고 자 하 는 기능 은 다음 과 같다.
액 티 비 티 A 에서 액 티 비 티 B 로 데 이 터 를 전송 한 뒤 액 티 비 티 B 에서 데 이 터 를 가 져 온 뒤 다시 액 티 비 티 A 로 전송 한다.Activity B 에'이전 페이지 로 돌아 가기'버튼 을 추가 하고 Activity A 로 돌아 간 후 이전에 입력 한 관련 정 보 를 유지 해 야 합 니 다.우 리 는 startActivity ForResult 로 Activity B 를 끌 어 올 립 니 다.그러면 Activity A 는 Activity B 가 돌아 오 기 를 기다 리 고 있 습 니 다.
구체 적 인 절 차 는 다음 과 같다.
1.Activity A 의 실현:
public class ExampleActivity extends Activity {
private EditText mEditText;
private RadioButton mRb1;
private RadioButton mRb2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_page_layout);
Button button = findViewById(R.id.buttonGoToLayout2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mEditText = findViewById(R.id.editText);
//
double height = Double.parseDouble(mEditText.getText().toString());
//
String gender = "";
mRb1 = findViewById(R.id.radioButtonMale);
mRb2 = findViewById(R.id.radioButtonFemale);
if (mRb1.isChecked()) {
gender = "M";
} else {
gender = "F";
}
Intent intent = new Intent(ExampleActivity.this, SecondActivity.class);
// Activity
Bundle bundle = new Bundle();
bundle.putDouble("height", height);
bundle.putString("gender", gender);
intent.putExtras(bundle);
startActivityForResult(intent, 0);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 0) {
Bundle bundle = data.getExtras();
double height = bundle.getDouble("height");
String gender = bundle.getString("gender");
mEditText.setText("" + height);
if (gender.equals("M")) {
mRb1.setChecked(true);
} else {
mRb2.setChecked(true);
}
}
}
}
2.레이아웃 파일 mainpage_layout.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center">
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=" "
android:paddingTop="20dp"
android:paddingLeft="20dp"
android:textSize="30sp"/>
<TextView
android:text=" :"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/textView3"
android:layout_alignStart="@id/textView1" android:layout_marginTop="38dp"
android:layout_below="@id/textView1" android:layout_marginStart="46dp"/>
<TextView
android:text=" :"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/textView4"
android:layout_alignStart="@id/textView1" android:layout_marginStart="46dp"
android:layout_below="@id/textView3" android:layout_marginTop="29dp"/>
<EditText android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_toEndOf="@id/textView4"
android:layout_marginStart="36dp"
android:autofillHints="@string/app_name"
android:hint="0"
android:layout_alignBaseline="@id/textView4"/>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text=" "
android:layout_alignBaseline="@id/editText"
android:layout_toRightOf="@id/editText"
android:layout_marginStart="10dp" />
<RadioButton
android:layout_below="@id/textView1"
android:id="@+id/radioButtonMale"
android:text=" "
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@id/textView1" android:layout_marginTop="30dp"
android:layout_marginStart="113dp"/>
<RadioButton
android:id="@+id/radioButtonFemale"
android:text=" "
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textView1"
android:layout_toEndOf="@id/radioButtonMale"
android:layout_marginLeft="15dp" android:layout_marginTop="30dp" android:layout_marginStart="49dp"/>
<Button
android:text=" "
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/buttonGoToLayout2"
android:layout_marginTop="90dp"
android:layout_below="@id/radioButtonMale"
android:layout_alignStart="@id/textView1" android:layout_marginStart="92dp"/>
</RelativeLayout>
3.Activity B 의 실현:
public class SecondActivity extends Activity {
private Intent mIntent;
private Bundle mBundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
mIntent = getIntent();
mBundle = mIntent.getExtras();
//
if (mBundle == null) {
return;
}
// Bundle
double height = mBundle.getDouble("height");
String gender = mBundle.getString("gender");
//
String genderText = "";
if (gender.equals("M")) {
genderText = " ";
} else {
genderText = " ";
}
//
String weight = getWeight(gender, height);
//
TextView textView = findViewById(R.id.textView2);
textView.setText(" " + genderText + "
" + height + "
" + weight + " ");
Button button = findViewById(R.id.buttonGoBack);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ,
setResult(RESULT_OK, mIntent);
finish();
}
});
}
//
private String format(double num) {
NumberFormat formatter = new DecimalFormat("0.00");
return formatter.format(num);
}
//
private String getWeight(String gender, double height) {
String weight = "";
if (gender.equals("M")) {
weight = format((height - 80) * 0.7);
} else {
weight = format((height - 70) * 0.6);
}
return weight;
}
}
4.Activity B 의 레이아웃:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="This is the second layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView2"
android:paddingTop="30dp"
android:paddingStart="50dp"/>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/buttonGoBack"
android:text=" "
android:layout_alignStart="@id/textView2"
android:layout_below="@id/textView2"
android:layout_marginTop="54dp" android:layout_marginStart="52dp"/>
</RelativeLayout>
하지만 여기 에는 주의해 야 할 세 가지 가 있다.1.startActivity ForResult 의 두 번 째 매개 변 수 는 requestCode 가 0 으로 전 달 된 것 입 니 다.그러면 우 리 는 전달 하 는 값 이 0 보다 적 고 0 보다 큰 것 이 어떤 결과 인지 살 펴 보 겠 습 니 다.
(1)0 보다 작은 값 을 전달 합 니 다.예 를 들 어-1:startActivity 를 호출 하 는 것 과 같 습 니 다.onActivity Result 는 호출 되 지 않 습 니 다.
(2)0 이상 의 값 을 전달 합 니 다.예 를 들 어 1:효 과 는 0 과 같 습 니 다.onActivity Result 의 첫 번 째 매개 변 수 는 바로 우리 가 startActivity ForResult 를 통 해 전달 하 는 requestCode 입 니 다.
2.onActivity Result 의 두 번 째 매개 변수 resultCode:두 번 째 activity 가 setResult 를 통 해 되 돌 아 왔 습 니 다.자주 사용 하 는 값 은 2 개 입 니 다:RESULTCANCELED、RESULT_OK
(1)RESULT_CANCELED:Activity B 당 김 실패,예 를 들 어 crash
(2)RESULT_OK:Activity B 조작 성공 후 반환 값
자주 사용 되 지 않 는 수치 가 하나 더 있 습 니 다:RESULTFIRST_USER,Android 소스 코드 는 이 수치 에 대한 정 의 는"user-defined activity results"(사용자 정의)입 니 다.저 는 소스 코드 에서 전역 적 으로 검색 해 보 았 습 니 다.사용 할 곳 이 많 지 않 고 사용 할 곳 을 한두 개 골 랐 습 니 다.
(1)PackageInstaller 아래 InstallFailed.java(apk 설치 실패 관련 페이지)
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int statusCode = getIntent().getIntExtra(PackageInstaller.EXTRA_STATUS,
PackageInstaller.STATUS_FAILURE);
if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
// ……..
setResult(Activity.RESULT_FIRST_USER, result);
finish();
}
(2)PackageInstaller 아래 InstallStaging.java
private void showError() {
(new ErrorDialog()).showAllowingStateLoss(getFragmentManager(), "error");
// …….
setResult(RESULT_FIRST_USER, result);
}
Package Installer 아래 Uninstaller Activity.java(apk 마 운 트 해제 관련 페이지):onCreate 방법 에 RESULT 로 여러 군데 설정 되 어 있 습 니 다.FIRST_USER。따라서 제 이 해 는 업무 자체 가 잘못 되 거나 무효 한 장면 에서 사용 하고 업무 자체 가 정의 하 는 것 입 니 다.
3.Activity B 를 시작 할 때 new 설정task 시작 모드,Activity B 에 들 어가 면 Activity A 는 즉시 onActivity Result 를 되 돌려 주 고 resultCode 는 0 입 니 다.Activity B setResult 에서 돌아 온 후,onActivity Result 의 반전 이 없습니다!
이상 은 안 드 로 이 드 가 startActivity ForResult 를 이용 하여 이전 Activity 로 데 이 터 를 되 돌려 주 는 상세 한 내용 입 니 다.안 드 로 이 드 가 이전 Activity 로 데 이 터 를 되 돌려 주 는 데 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.