2014-09-29 91 views
0

我如何獲取最終用戶到達任何活動的路徑。Android - 如何獲得活動路徑

所以如果用戶訪問了活動A,B,C ..然後在Activity c中,我將能夠獲得像這樣的信息「A/B/C」。同樣,如果用戶直接將路徑帶到D,F,則在活動F中我將具有「D/F」的路徑信息。

回答

0

每當你開始一個活動,你可以傳遞一個字符串額外的說明你​​正在談論的路徑。一個簡單的例子可能是在一個抽象的基本活動類的這個方法,並使用它時,開始一個新的活動:

public <T extends Activity> void startActivityWithPathInfo(Class<T> activityClass) { 
    String path = getIntent().getStringExtra("path"); 
    path = path == null ? "" : path += "/"; 
    path += this.getClass().getSimpleName(); 
    Intent i = new Intent(this, activityClass); 
    i.putExtra("path", path); 
    startActivity(i); 
} 

然後在每一個活動,你可以只使用獲得當前路徑:

String path = getIntent().getStringExtra("path"); 

編輯:根據您的要求,最好將其分解爲「getPath()」方法和「startActivityWithPathInfo(Class)」方法。可能是您更容易找回在每個活動:)

編輯2的路徑:按照意見,這裏是更新後的代碼:

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, ""); 
     } 
    } 

    @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); 
    } 
} 
+0

但在你的例子,如果我打了會發生什麼後退按鈕反向,那麼我不會得到正確的路徑 – j2emanue 2014-09-29 05:15:01

+0

它仍然是正確的道路。每個活動都保持對啓動它的Intent的引用。但是,您只是讓我意識到,如果系統在後臺處於活動狀態時會終止此操作,則此操作將不起作用。我會發佈一個修改來解決這個問題。 – 2014-09-29 07:34:02

+0

非常好。欠你。這個代碼很棒。你的輝煌。 – j2emanue 2014-09-29 17:19:52