2014-09-28 3 views
0

Launcher 활동부터 시작하여 앱이 어떤 수준 (계층 구조)인지 알 수있는 방법이 필요합니다.Android - 활동 스택의 어떤 페이지 수준 (계층 구조)인지 알 수 있습니다.

이미지 예를 들어 사용자가 &는 다음 경로 소요 쇼핑 응용 프로그램입니다 : ----> 3. 쇼핑 카트를 구입하는 신발

  1. 주요 활동 ---> 2. 목록 - -> 4. 체크 아웃

그래서 체크 아웃은 레벨 4가 될 것입니다. 사용자가 신발을 살피면 레벨 2가 될 것입니다.보고 할 때이 것이 필요합니다.하지만 생각에는 너무 많은 정보입니다. 난 그냥 응용 프로그램에서 레벨/섹션 인스턴트 메신저 알아야합니다. 어떻게하면 활동 라이프 사이클에서이를 추적 할 수 있을까요?

업데이트 : 나는 레벨이라 불리는 정적 변수를 가지고 있으며, 앱에서 애플리케이션을 확장하여 활동이 시작될 때마다 0으로 재설정 할 수 있습니다. 그럼 내 활동에 온 스타트와 레벨을 조정하는 인스턴트 메신저하지만이 모든 시나리오를 돌봐 줄 모르겠다.

@Override 
    public void onStart() { 
     // TODO Auto-generated method stub 
     super.onStart(); 
     sLevel++; 
    } 


    @Override 
    public void onStop() { 
     // TODO Auto-generated method stub 
     super.onStop(); 
     sLevel--; 
} 

그러나 작동하지 않습니다. 내 모든 활동 (그리고 적어도 50)은 baseActivity라는 추상 클래스에서 확장됩니다. 베이스 액티비티에서 나는 레벨을 메인으로하고 싶습니다. 최종 목표는 사용자의 출처를 추적하는 것입니다. 최종 사용자가 활동에 도달하기 위해 취한 경로를보고해야합니다.

+0

음. 2의 onCreate에서 값 2의 공유 된 pref를 저장 하시겠습니까? 모든 화면에서 동일합니까? 나는 뭔가를 얻지 못하고있다. – VM4

+0

내 모든 활동 (및 적어도 50 개)은 baseActivity라는 추상 클래스에서 확장됩니다. 베이스 액티비티에서 나는 레벨을 메인으로하고 싶습니다. – j2emanue

답변

0

정말 그렇게하는 것을 좋아하지 않습니다.

어쨌든 설명 된대로 각 화면마다 하나의 활동을 만들어야합니다. 그런 다음 각 활동에 대해 정수 값 1-4를 지정합니다. 문제 해결됨.

+0

내 모든 활동 (및 적어도 50 개가 있음)은 baseActivity라는 추상 클래스에서 확장됩니다. 베이스 액티비티에서 나는 레벨을 메인으로하고 싶습니다. – j2emanue

+0

나는 그것을 얻지 못한다. 그래서 당신은 50 가지 활동을 가지고 있으며, 그 50 가지 활동에서 수정 된 가치를 정의한다. 레벨을 그룹화 할 수 있으면 "레벨"활동을 작성한 다음 기본 활동에서 직접 확장하는 것보다 적합한 레벨로 활동을 확장시킬 수 있습니다. 이것이 그 방법 중 하나입니다. – RobGThai

0

응용 프로그램 탐색이 선형 인 경우 솔루션이 작동합니다. 이 경우에는 각 Activity의 onResume() 콜백 내부에있는 활동 이름을 쓰지 않는 이유를 알 수 없습니다.

응용 프로그램 흐름이 선형 (A에서 B에서 C)이 아닌 경우 솔루션에서 원하는 결과를 얻지 못합니다. 예를 들어, A는 B와 C를가집니다.

+0

최종 목표는 사용자의 출처를 추적하는 것입니다. 최종 사용자가 액티비티에 도착하기까지 걸린 경로를보고해야합니다. – j2emanue

+0

사용자가 다른 범주로 이동하여 선형이 될 수있는 탐색 모음이 있습니다. – j2emanue

+0

목표를 기반으로하면, 액티비티가 처음 시작되거나 다시 시작될 때 콜백이 호출되므로 각 액티비티의 onResume 메소드에 로그 문을 추가하면됩니다. –

0

다른 사람이 나를 길 도움이되었습니다. 당신의 모든 활동을 위해 기본 수업을 사용하는 것을 권장합니다. 아래 코드를 사용하십시오. 또한 실제로 레벨을 int로 지정해야한다면 getPath()를 호출하고 분리 자 "/"에서 문자열을 분할하십시오. 그 배열의 길이는 당신의 레벨이 될 것입니다.

public abstract BaseActivity extends Activity { 
private static final String EXTRA_PATH = "path"; 

private String path; 

@Override public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState == null) { 
     path = getPath(); 
    } else { 
     path = savedInstanceState.getString(EXTRA_PATH, ""); 
    } 
}`enter code here` 

@Override protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString(EXTRA_PATH, path); 
} 

public String getPath() { 
    if (path == null) { 
     path = getIntent().getStringExtra(EXTRA_PATH); 
     path = path == null ? "" : path += "/"; 
     path += this.getClass().getSimpleName(); 
    } 
    return path; 
} 

    public <T extends Activity> void startActivityWithPathInfo(Class<T> activityClass) { 
     Intent i = new Intent(this, activityClass); 
     i.putExtra(EXTRA_PATH, getPath()); 
     startActivity(i); 
    } 
} 
관련 문제