java - Activity 类别下降

标签 java android android-activity android-fragmentactivity downcast

我有两个不同的 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/

相关文章:

php - Laravel:从 android(不是浏览器)询问 "Am I Logged in?"

java - Eclipse 在多个项目上运行不同的 Maven 目标

java - 在spark java中下载图片

java - 如何使用 Junit 和 Spring 手动提交事务

android - 使用 Gpt 声明依赖项时,Gpt 和 Gradle 中的实现有什么区别?

Android如何在gear vr设备的外部和内部打开应用程序

java - 如何启动另一个应用程序的特定(显式) Activity

android - Android 中 Activity 启动时动画 View

java - Apache CXF 网络服务中的文档样式

android - 如何处理 Android Activity 中的通知