我在Android中有这个问题。考虑三个片段:A
、B
、C
。C
可以调用 fromA
或 from B
。有没有办法知道是从哪个片段C
中调用的?
已编辑
好的,伙计们,我将解释我要做什么。假设我有这个电话:A 调用 B,B 调用 C。
当我按下 C 中的后退按钮时,它让我回到 B,这很好。但是当我再次按下后退按钮时,它会将我带到 C,而不是 A。
这是我的代码:
@Override
public void onBackPressed() {
//this is the current fragment
Fragment fragmentActual = this.getSupportFragmentManager().findFragmentById(android.R.id.tabcontent);
String fragmentTag = fragmentoActual.getTag().toString();
//If I press the back button in C:
if(fragmentTag.equals("TAG C")){
Fragment removefragment = this.getSupportFragmentManager().findFragmentByTag("TAG B");
Fragment fragmentClient = this.getSupportFragmentManager().findFragmentByTag("TAG C");
//If Im NOT passing arguments to B, I know this is a new form
if(removefragment.getArguments()== null){
//I always pass arguments to fragment C, but just in case:
if(fragmentClient.getArguments()!= null){
Bundle mArguments = fragmentClient.getArguments();
//FRAGMENT B
FragmentB fragmentB = new FragmentB ();
fragment.setArguments(mArguments);
FragmentManager manager = this.getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.addToBackStack(null);
ft.replace(android.R.id.tabcontent,fragmentB,"TAG B");
ft.commit();
}
}else{
super.onBackPressed();
}
}else{
super.onBackPressed();
}
}
现在我将解释代码。基本上它的作用是在调用片段 C 时替换片段 B。我这样做是因为我需要将参数传递给片段 B。但是当我进行替换时,片段 B 的“历史”丢失了,我的意思是当我按下 B 中的后退按钮时,我无法返回片段 A (这就是为什么我想知道我是否知道谁打电话给谁)。
第一次调用片段 B 时,我不传递参数,因为它是一个空白表单。但是当我在 B 中调用 C 时,我需要将参数传递给片段 B(按下后退按钮时),因此它可以显示更新的信息。
如果有不清楚的地方,请告诉我,以便我更好地解释自己。
已编辑 2:此问题与此https://stackoverflow.com/questions/16703604/back-press-button-when-i-save-a-form-for-the-first-time-a-list-view有关-is-not-updat。也许它让我的想法更清楚。