如何知道哪个片段称为另一个片段?

时间:2013-05-23 15:36:44

标签: android android-fragments

我在Android中遇到此问题。考虑三个片段:ABC。可以从CA调用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 < strong>(这就是为什么我想知道我能否知道谁会打电话)。

我调用片段B时的第一次,我不传递参数,因为它是一个空白表格。但是当我调用C,停留在B中时,我需要将参数传递给片段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有关。也许这让我的想法更加明确。

4 个答案:

答案 0 :(得分:3)

Luksprog的答案我认为是最好的:“你可能想要解决这些问题。你总是可以选择将数据包传递给新创建的片段,提及谁调用它。然后在中使用getArgument()片段会知道谁叫它。“。

我还没有找到另一种更好的方法。

答案 1 :(得分:1)

您可以使用setTargetFragment方法设置哪个是父片段。然后,您可以使用方法getTargetFragment找出谁给您打电话。

答案 2 :(得分:0)

你正在做的是在Fragments之间转换,调用addToBackStack()作为FragmentTransaction的一部分:

我想,这就是你需要的。

private final static String TAG_FRAGMENT = "TAG_FRAGMENT";

private void showFragment() {
    final Myfragment fragment = new MyFragment();
    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);
    transaction.addToBackStack(null);
    transaction.commit();
}

@Override
public void onBackPressed() {
    final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);

    if (fragment.allowBackPressed()) { // and then you define a method allowBackPressed with the logic to allow back pressed or not
        super.onBackPressed();
    }
}

答案 3 :(得分:0)

您可以使用FragmentManager创建片段的后栈。您还必须首先使用Fragment Transactions。更多信息请参见:http://developer.android.com/guide/components/fragments.html#Transactions