我怎样才能获得最终用户到达任何活动的路径。
因此,如果用户访问了活动 A、B、C .. 那么在活动 ci 中将能够获得类似“A/B/C”的信息。同样,如果用户直接将路径带到 D、F,那么在活动 F 中,我将拥有“D/F”的路径信息。
我怎样才能获得最终用户到达任何活动的路径。
因此,如果用户访问了活动 A、B、C .. 那么在活动 ci 中将能够获得类似“A/B/C”的信息。同样,如果用户直接将路径带到 D、F,那么在活动 F 中,我将拥有“D/F”的路径信息。
每当您启动 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");
编辑:鉴于您的要求,最好将其拆分为“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);
}
}