Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 活动类向下广播_Java_Android_Android Activity_Android Fragmentactivity_Downcast - Fatal编程技术网

Java 活动类向下广播

Java 活动类向下广播,java,android,android-activity,android-fragmentactivity,downcast,Java,Android,Android Activity,Android Fragmentactivity,Downcast,我有两个不同的活动可以“实例化”相同的片段。 在片段中,我需要保存对容器活动的引用 MyActivity1 extends FragmentActivity MyActivity2 extends FragmentActivity 引用存储在片段类字段中。 我不能是泛型的: private Activity activity; 然后: activity = getActivity(); 这样,我就无法使用为自定义MyActivity1/MyActivity2实现的方法。 向下广播似乎也没什

我有两个不同的活动可以“实例化”相同的片段。 在片段中,我需要保存对容器活动的引用

MyActivity1 extends FragmentActivity
MyActivity2 extends FragmentActivity
引用存储在片段类字段中。 我不能是泛型的:

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方法?希望我的问题是清楚的。

这没有帮助,因为您将强制转换指定给的是泛型类型,而不是特定类型

if (getActivity() instanceof MyActivity1) {
    ((MyActivity1) getActivity()).mMethod1(); 
} else if (getActivity() instanceof MyActivity2) {
    ((MyActivity2) getActivity()).mMethod2();  
}

我建议您拥有一个带有抽象方法的抽象类,以及该类的两个具体扩展,它们提供了抽象方法的各自实现。在这种情况下,您可以保留对抽象类的引用,并且方法调用将转发到正确的具体实例

,因为例如,只有
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();
}


嗯,

是的,但我需要一个参考,以便在类的其他方法中进一步使用,所以我需要两个字段?我明白了,这样你就必须始终检查并转换为确切的类型,它没有那么漂亮。若我是,我会有一个抽象的MyActivity类,带有一个抽象的方法。MyActivity1和MyActivity2扩展了MyActivity并提供了抽象方法的实现。因此,您可以保留对MyActivity的引用,正确的方法将被称为Dok,嗯,我在这两个活动中有多个不同的方法,其中一些方法没有在另一个活动中实现。这取决于视图。您还可以有一个空方法。我知道,这不是世界上最好的事情,但方法不多。。总而言之,我无法告诉你设计应用程序的最佳方式:)使用私人碎片活动;代替私人活动;它不工作,我不能调用子类特定的方法。
MyActivityInterface activity;

// ...

if (getActivity() instanceof MyActivity1) {
    activity = (MyActivityIntercface) getActivity();
} else {
    activity = (MyActivityIntercface) getActivity();
}

activity.mMethod();