Android는 백 스택에서 활동을 제거합니다.
좋아, 그래서 이걸로 뭘 해야할지 좀 난처 해 그래서 MainActivity가 있고 거기에서 Activity를 DegreePlanActivity로 시작할 수 있으며 거기에서 다른 Activity를 EditDegreePlan으로 시작할 수 있습니다. AndroidManifest에서 EditDegreePlan을 noHistory로 설정했습니다. 문제는 EditDegreePlan을 저장 한 후 DegreePlan에 활동을 시작한다는 것입니다. 따라서 사용자가 뒤로를 누르면 MainActivity로 다시 이동하려면 두 번 눌러야합니다. 한 번만 누르면되므로 제거하고 싶습니다. 나는 이것을하는 방법에 대해 난처하다.
DegreePlanActivity를 noHistory로 설정하면 EditDegreePlan에서 뒤로를 누를 수 없습니다.
onBackPressed 메서드를 재정의하고 MainActivity에 대한 인 텐트를 시작하려고했습니다. 문제는 앱을 종료하려면 뒤로를 여러 번 눌러야한다는 것입니다.
어떻게해야합니까?
FLAG_ACTIVITY_CLEAR_TOP 는 활동 스택을 지 웁니다. 아래 코드를 사용할 수 있습니다.
Intent intent = new Intent(this, Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
이 플래그는 당신이를 A, B, C 당신은에있는 경우, 예를 들어, 단지 중간 활동을 지 웁니다 기억 Back Stack
다음이 플래그 D에 C Activity에서 진행이 되지 않습니다 명확 Back Stack
하고 스택은 A, B, C, D가 될 것입니다하지만 경우 이 플래그를 사용하여 활동 D에서 활동 A로 이동하면 B, C, D 활동이 스택에서 팝업되고 백 스택에 A 만 있습니다.
API> = 15 ~ API 23 사용자 활동 이름에 대한 간단한 솔루션입니다.
Intent nextScreen = new Intent(currentActivity.this, MainActivity.class);
nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(nextScreen);
ActivityCompat.finishAffinity(currentActivity.this);
Android 자습서에 설명 된대로 EditDegreePlan-Activity를 시작할 때 startActivityForResult()
단순히 를 사용하는 대신 을 사용하는 것이 좋습니다 .startActivity()
EditDegreePlan-Activity에서 다음을 호출합니다.
setResult(RESULT_OK);
finish();
EditDegreePlan-Activity에서 데이터를 기대하지 않는 경우 onActivityResult
.
플래그를 전혀 지정하지 않으면 원하는 동작을 얻을 수 있습니다. 뒤로 버튼은 옳은 일을 할 것입니다. 코드 내에서 활동을 닫으려면 finish()
사용자가 뒤로 버튼을 누르는 것과 동일한 효과가있는 메서드를 사용 합니다. 따라서 EditDegreePlan을 완료하면 자동으로 DegreePlan에 도착하게되며, 어느 Intents
쪽도 호출 할 필요가 없습니다 .
흐름은 다음과 같습니다.
MainActivity-> DegreePlanActivty-> EditDegreePlan-> DegreePlan-> MainActivty
"DegreePlan"내에서이 메서드를 재정의합니다.
public void onBackPressed() {
super.onBackPressed();
Intent goToMainActivity = new Intent(getApplicationContext(), MainActivity.class);
goToMainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Will clear out your activity history stack till now
startActivity(goToMainActivity);
}
이것을 사용하여 스택을 지우십시오.
menuIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
새로운 활동을 시작하기 전에 finish를 호출 할 수 있습니다. 그러면 현재 활동이 언로드되므로 다음 활동에서 뒤로 버튼을 누르면 첫 번째 활동이 더 이상 존재하지 않습니다.
Intent i = new Intent(MainActivity.this, NextActivity.class);
finish();
startActivity(i);
매니페스트 내부의 백 스택에서 활동을 제거하려면 android:noHistory="true"
매니페스트 파일 내부의 활동에 추가 하십시오.
아래 샘플을 참조하십시오.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activity"
android:versionCode="1"
android:versionName="1.0">
<application android:name="MyApp" android:label="My Application">
<activity android:name=".LoginActivity"
android:noHistory="true"> //add this line to your activity inside manifest
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
Intent intent = new Intent(getContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
다음과 같이 플래그를 추가하고 활동을 시작하고 아래 코드를 시도하십시오.
Intent i = new Intent(activity, Payment.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
activity.startActivity(i);
참고 URL : https://stackoverflow.com/questions/14112219/android-remove-activity-from-back-stack
'Programing' 카테고리의 다른 글
보안 페이지에서 모든 안전하지 않은 콘텐츠 찾기 (0) | 2020.11.23 |
---|---|
한 번에 여러 문자열 바꾸기 (0) | 2020.11.23 |
jQuery에서 소수점 이하 2 자리로 숫자를 포맷하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.23 |
집합의 모든 하위 집합을 얻는 방법은 무엇입니까? (0) | 2020.11.23 |
Android NDK의 파일 작업 (0) | 2020.11.23 |