1. activity_main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView
android:id="@+id/tv_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="textView"
android:textSize="30sp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_main"
android:text="GO"/>
</LinearLayout>
|
cs |
2. activity_sub.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/et_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Main으로 보낼 값을 입력하시오."/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="종료"
android:id="@+id/btn_sub"/>
</LinearLayout>
|
cs |
startActivityForResult() 함수를 통해서 띄울 activity의 layout을 만들어준다.
3. MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package com.example.startactivityforresultexample;
import ...
public class MainActivity extends AppCompatActivity {
private TextView textView;
private Button button;
private static final int REQUEST_CODE = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.tv_main);
button = (Button)findViewById(R.id.btn_main);
button.setOnClickListener(v -> {
Intent intent = new Intent(getApplicationContext(), SubActivity.class);
startActivityForResult(intent, REQUEST_CODE);
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable @org.jetbrains.annotations.Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Toast.makeText(getApplicationContext(), "수신 성공", Toast.LENGTH_SHORT);
} else {
Toast.makeText(getApplicationContext(), "수신 실패", Toast.LENGTH_SHORT);
}
if (requestCode == REQUEST_CODE) {
String resultText = data.getStringExtra("text");
textView.setText(resultText);
}
}
}
|
cs |
16~17 - SubActivity를 띄우기 위한 intent를 만들고 startActivityForResult() 함수를 이용해서 SubActivity를 띄운다.
21~32 - onActivityResult()를 통해서 SubActivity를 끝내고 실행되는 이벤트를 설정할 수 있다.
23~27 - SubActivity.java에서 설정할 resultCode를 이용해서 수신 결과에 대해서 판단한다.
28~31 - 위에서 startActivityForResult()함수의 매개변수로 전달했던 REQUEST_CODE를 이용해서 result가 어떤 Activity에 의한 것인지 확실히 판단하는 듯하다. 그리고 data.getStringExtra(String name)로 SubActivity.java에서 putExtra(String name, value)를 통해서 저장했던 정보에 접근할 수 있다.
4. SubActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package com.example.startactivityforresultexample;
import ...
public class SubActivity extends Activity {
private EditText editText;
private Button button;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
editText = (EditText)findViewById(R.id.et_sub);
button = (Button)findViewById(R.id.btn_sub);
button.setOnClickListener(v -> {
Intent intent = new Intent();
intent.putExtra("text", editText.getText().toString()); //intent에 정보 저장
setResult(RESULT_OK, intent); //결과 값 설정
finish(); //현재 액티비티 종료
});
}
}
|
cs |
15~16 - intent를 만들고 putExtra(String name, value)를 통해서 전달할 정보를 저장한다.
17 - setResult(int resultCode, Intent intent)를 통해서 결과 값을 설정한다.
18 - finish()로 현재 activity를 종료한다.
5. AndroidManifest.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.startactivityforresultexample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.StartActivityForResultExample">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SubActivity"/>
</application>
</manifest>
|
cs |
17 - 위처럼 activity를 등록한다.
* startActivityResult
https://developer.android.com/training/basics/intents/result?hl=ko
startActivityForResult(), onActivityResult()를 사용하는 것을 권장하지 않는다고 한다.
그리고 이제 startActivityForResult()를 startActivityResult.launch(intent)으로 바꾸고
onActivityResult()를 아래와 같이 바꾸어야한다.
1
2
3
4
5
6
7
8
9
10
11
12
|
ActivityResultLauncher<Intent> startActivityResult = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK) {
...
}
}
});
|
cs |
더 자세한 것은 위의 링크의 페이지에서 찾을 수 있다.
'Android App' 카테고리의 다른 글
selector로 버튼 꾸미기 in Android Studio (0) | 2021.10.02 |
---|---|
googleMapApplication (현재 위치, marker 새로 만들기) in Android Studio (0) | 2021.09.24 |
하단 선택바 (bottomNavigation, Fragment 전환) in Android Studio (0) | 2021.09.17 |
외부저장소 동영상 플레이어 in Android Studio (0) | 2021.09.04 |
mediaPlayer+surfaceView, 동영상 소형플레이어 기본모드 전환 in Android Studio (0) | 2021.09.04 |