我有两个不同的 Activity 可以“实例化”同一个 fragment 。 在 fragment 内,我需要保存对容器 Activity 的引用。
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
}
我应该使用两个字段(每个 Activity 类型一个)并留一个空白吗? java 有更聪明的方法来做到这一点吗?希望我的问题很清楚。
最佳答案
这没有帮助,因为您将转换分配给通用类型而不是特定的
if (getActivity() instanceof MyActivity1) {
((MyActivity1) getActivity()).mMethod1();
} else if (getActivity() instanceof MyActivity2) {
((MyActivity2) getActivity()).mMethod2();
}
我建议您拥有一个带有抽象方法的抽象类,以及该类的两个具体扩展,它们提供了自己的抽象方法的实现。在这种情况下,您可以保留对抽象类的引用,并且方法调用将被转发到正确的具体实例
关于java - Activity 类别下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26425033/