만약에 메뉴 1 -> 메뉴 2로 넘어가는 스택의 경우 상관 없지만, 메뉴 1- > 메뉴 1로 움직이는 경우 두 액티비티를 동시에 올리면 스택의 낭비가 심해진다. 따라서, 같은 액티비티로 넘어갈 때 같은 액티비티를 띄우지 않게끔 스택관리를 해야한다.
다음 코드는 네비게이션에서 액티비티를 변경하는 클래스를 구현한 코드이다.
package com.mary.navigationintentex01;
import android.content.Context;
import android.content.Intent;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import com.google.android.material.navigation.NavigationView;
public class NavigationViewHelper {
public static void enableNavigation(final Context context, NavigationView view){
view.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
if(item.getItemId()==R.id.menu1){
Intent intent=new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intent);
}else if(item.getItemId()==R.id.menu2){
Intent intent=new Intent(context, SubActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intent);
}
return true;
}
});
}
}
addFlag를 통해 동일한 플래그가 발생 시 싱글탑 속성을 걸어두면 두 액티비티 중 위의 것만 스택에 남게 된다.
이걸 어떻게 확인 가능할까
onNewIntent 속성으로 확인 가능하다.
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d(TAG, "onNewIntent: 호출");
}
다음 코드를 이용해보면, 다른 액티비티로 넘어갈 때는 동작하지 않지만 같은 액티비티로 움직일때는 호출된다.
반응형
'Android' 카테고리의 다른 글
안드로이드 스튜디오, JAVA] 토스트, 스낵바, 대화상자 (0) | 2020.07.22 |
---|---|
안드로이드 스튜디오, JAVA] Material Navigation Drawer을 이용하여 네비게이션으로 액티비티 전환 (0) | 2020.07.22 |
안드로이드 스튜디오, JAVA]Material Design Navigation View에서, onNavigationItemSelected가 인식되지 않을 때 (0) | 2020.07.22 |
Android Studio, JAVA] Result (0) | 2020.07.21 |
Android Studio, Java] 생명주기 (0) | 2020.07.21 |