我有2个不同的活动可以“实例化”相同的片段。 在片段内部,我需要保存对容器活动的引用。
MyActivity1 extends FragmentActivity
MyActivity2 extends FragmentActivity
引用存储在Fragment类字段中。 我不能通用:
private Activity activity;
然后:
activity = getActivity();
这样我就无法使用为自定义MyActivity1 / MyActivity2实现的方法。 向下倾斜似乎也没有帮助:
if (getActivity() instanceof MyActivity1) {
activity = (MyActivity1) getActivity();
activity.mMethod1(); // NOPE
} else {
activity = (MyActivity2) getActivity();
activity.mMethod2(); // NOPE
}
我应该使用两个字段(每个活动类型一个)并留空吗? 任何java更智能的方式来做到这一点?希望我的问题很明确。
答案 0 :(得分:1)
它没有帮助,因为您将转换分配给泛型类型而不是特定的
if (getActivity() instanceof MyActivity1) {
((MyActivity1) getActivity()).mMethod1();
} else if (getActivity() instanceof MyActivity2) {
((MyActivity2) getActivity()).mMethod2();
}
我建议你有一个带抽象方法的抽象类,以及这个类的两个具体扩展,它们提供了自己的抽象方法实现。在这种情况下,您可以保留对抽象类的引用,并将方法调用转发到正确的具体实例
答案 1 :(得分:1)
例如只有MyActivity1
有mMethod1()
,您每次将其调用到正确的班级时都需要投放activity
。恕我直言,两个领域的方法听起来更好。
代码可能类似于:
if (getActivity() instanceof MyActivity1) {
activity = (MyActivity1) getActivity();
((MyActivity1) activity).mMethod1();
} else {
activity = (MyActivity2) getActivity();
((MyActivity2) activity).mMethod2();
}
或者,您可以声明定义mMethod()
的接口,并让两个活动实现该接口。然后您可以:
interface MyActivityInterface {
public void mMethod();
}
和
MyActivityInterface activity;
// ...
if (getActivity() instanceof MyActivity1) {
activity = (MyActivityIntercface) getActivity();
} else {
activity = (MyActivityIntercface) getActivity();
}
activity.mMethod();
HTH,