假设我有一个包含三个按钮的片段,我想重复使用它至少三个活动,但我希望这些按钮为每个活动做不同的事情。例如,在ActivityA中,我希望button1打开Google地图,而在ActivityB中,button1会转到音乐播放器。这有可能,甚至是正确的方式吗?
答案 0 :(得分:2)
当然可以。只需使用您想要的回调方法FragmentCallback
为Fragment创建一个接口,例如onButtonClick()
。在片段的onAttached()
中,将Activity转换为新界面并将其存储在变量private FragmentCallback callback;
中。使用此Fragment的每个Activity都必须实现此回调接口。然后在Fragments onButtonClick()
方法中调用回调onButtonClick()
方法。就是这样 - 一种非常常见的模式。
答案 1 :(得分:1)
这可能吗?
它定义为。您可以检查哪个Activity
正在托管您的Fragment
实例:
private void button1OnClick(){
/* could also use instanceof, BUT: if you have something like ActivityC extends ActivityA
then instanceof would evaluate to true for both */
if(getActivity().getClass().equals(ActivityA.class)) {
// do stuff
} else if(getActivity().getClass().equals(ActivityB.class)) {
// do another stuff
}
}
这是正确的方法吗?
(注意力的回答)
这取决于。如果您有复杂而独特的布局/功能,我会使用不同的Fragments
。如果你有一个简单的布局,其中一些按钮只需要在不同的Activities
中采取不同的行动,那么重用现有的Fragment
类是个好主意。
答案 2 :(得分:1)
是的,你可以,但你必须为你的片段添加更多的逻辑,并为每个活动添加一些接口。 我不建议这样做,也许你可以重用你的布局。
答案 3 :(得分:0)
是的,你可以!
if(getActivity() instanceOf ActivityA) {
//do stuff related to ActivityA
} else if(getActivity() instanceOf ActivityB) {
//do stuff related to ActivityB
}
答案 4 :(得分:0)
您的活动有不同的逻辑,您可以在每个活动中定义按钮逻辑并以这种方式共享视图。您可以使用片段来完成此操作,但是通过共享部分布局可以更直接。
创建名为three_buttons.xml的部分布局
three_buttons.xml
<LinearLayout>
<BUtton android:text="button 1"/>
<BUtton android:text="button 2"/>
<BUtton android:text="button 3"/>
</LinearLayout>
activity_a.xml
<LinearLayout>
<TextView android:text="I am A"/>
<include
android:id="@+id/three_buttons"
layout="@layout/three_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
activity_b.xml
<LinearLayout>
<TextView android:text="I am B"/>
<include
android:id="@+id/three_buttons"
layout="@layout/three_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>