在许多网站中,我发现片段必须始终嵌入到一个活动中,片段的生命周期直接受到主机活动生命周期的影响 - 当活动暂停时,所有碎片都在它,当活动被破坏时,所有碎片都是如此。
但是,它也写在那里我们可以在不同的活动中重用片段 - 但从上面来看,如果我们转移到另一个活动,片段将被销毁。我缺少什么,或者更确切地说,有人能给我一个在不同活动中重用相同片段的例子吗?
答案 0 :(得分:2)
我认为你对Fragment
实现和Fragment
实例的概念感到困惑。您可以在不同的Fragment
中使用相同的Activity
实施,但对于每个Activity
,您需要一个新的Fragment
实例。该实例的生命周期将受到主机Activity
生命周期的直接影响。
拥有Fragment
,我们称之为FragmentA
,以及一对Activity
,我们称之为ActivityA
和ActivityB
,您有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
}
在这种情况下,您可以在展位FragmentA
和ActivityA
中使用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();
}
}
像这样,instanceA
与ActivityA
的生命周期相关,instanceB
与ActivityB
的生命周期相关,但展位是{{1}的实例}}
答案 1 :(得分:0)
重用意味着某个Fragment
(FragmentA
)与某个Activity
(ActivityA
)无关,但可以由不同的Activities
使用}(ActivityB
,ActivityC
)。这并不意味着您可以在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中使用片段。