Android - 如何获取活动路径

时间:2014-09-29 01:16:59

标签: android uri activity-stack

我如何获得最终用户到达任何活动所需的路径。

因此,如果用户访问了活动A,B,C ..那么在活动c中,我将能够获得这样的信息" A / B / C"。同样,如果用户将路径直接带到D,F然后在活动F中,我将获得" D / F"的路径信息。

1 个答案:

答案 0 :(得分:0)

每当你开始一个活动时,你可以传递一个额外的字符串来说明你正在谈论的路径。一个简单的例子可能是将这个方法放在一个抽象的基本活动类中,并在开始一个新的Activity时使用它:

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

修改:鉴于您的要求,最好将其拆分为&#34; getPath()&#34;方法和&#34; startActivityWithPathInfo(Class)&#34;方法。您可能更容易在每个活动中检索路径:)

编辑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);
    }
}