片段活动内的生命周期

时间:2016-05-25 13:36:50

标签: android android-fragments android-activity

在许多网站中,我发现片段必须始终嵌入到一个活动中,片段的生命周期直接受到主机活动生命周期的影响 - 当活动暂停时,所有碎片都在它,当活动被破坏时,所有碎片都是如此。

但是,它也写在那里我们可以在不同的活动中重用片段 - 但从上面来看,如果我们转移到另一个活动,片段将被销毁。我缺少什么,或者更确切地说,有人能给我一个在不同活动中重用相同片段的例子吗?

5 个答案:

答案 0 :(得分:2)

我认为你对Fragment实现和Fragment实例的概念感到困惑。您可以在不同的Fragment中使用相同的Activity实施,但对于每个Activity,您需要一个新的Fragment实例。该实例的生命周期将受到主机Activity生命周期的直接影响。

拥有Fragment,我们称之为FragmentA,以及一对Activity,我们称之为ActivityAActivityB,您有3个类:< / p>

public FragmentA extends Fragment {
    // All the FragmentA implementation
}

public ActivityA extends Activity {
    // All the ActivityA implementation
}

public ActivityB extends Activity {
    // All the ActivityB implementation
}

在这种情况下,您可以在展位FragmentAActivityA中使用ActivityB的实施,但是对于每种情况,您都需要创建FragmentA的新实例}。

public ActivityA extends Activity {

    loadFragmentA() {
        FragmentA instanceA = new FragmentA();
        getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.fragment_container, instanceA)
                    .commit();
    }
}

public ActivityB extends Activity {
     loadFragmentA() {
        FragmentA instanceB = new FragmentA();
        getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.fragment_container, instanceB)
                    .commit();
    }
}

像这样,instanceAActivityA的生命周期相关,instanceBActivityB的生命周期相关,但展位是{{1}的实例}}

答案 1 :(得分:0)

重用意味着某个FragmentFragmentA)与某个ActivityActivityA)无关,但可以由不同的Activities使用}(ActivityBActivityC)。这并不意味着您可以在Fragment之间传递Activities个实例。

答案 2 :(得分:0)

你错了。通过重用,这意味着我们可以在多个位置使用一个片段(定义)而不是片段对象本身。它并不意味着您可以在活动之间传递片段实例。对于新活动,有一个新的SupportFragmentManager / Manager。因此,您必须创建同一片段的新实例。

因此,片段允许您只为不同的屏幕保留一段代码。

答案 3 :(得分:0)

这里的关键是片段的onAttach(Activity)方法,一旦片段与父活动相关联就被调用。

您为使用该片段所需的任何活动创建片段类的实例,并在片段事务中使用它。

DetailsFragment details = DetailsFragment.newInstance(index);

FragmentTransaction ft = getFragmentManager().beginTransaction();
                
ft.replace(R.id.details, details);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);

ft.commit();

答案 4 :(得分:0)

如果要重用片段,则应将活动转换为片段。

您只能重用要进行事务(活动或片段)的FragmentManager的现有片段的片段。

从FragmentManager查看此帖子: https://developer.android.com/reference/android/app/FragmentManager.html 如果在事务处调用方法addToBackStack,则允许在BackStack中使用片段。