Java 片段到片段的通信-为什么接口真的是必要的?

Java 片段到片段的通信-为什么接口真的是必要的?,java,android,android-fragments,Java,Android,Android Fragments,这里完全是初学者 据我所知,片段应该通过它们的托管活动相互通信,作为在其他情况下保持独立和可重用的一种方式 我已经读过,应该通过在片段中声明接口并在活动中实现它们来完成。 这是“仅仅”因为您可以确保活动已准备好进行沟通的最佳方式吗(它确实有处理沟通的方法) 由于我很难在界面(以及java/android中的许多其他东西)上下功夫,这能在没有界面的情况下完成吗?我是否可以在片段中获取对宿主活动的引用,然后调用该活动的方法 (片段类) (活动课) 或者,在这种情况下,实现接口还有什么我不知道的吗 *

这里完全是初学者

据我所知,片段应该通过它们的托管活动相互通信,作为在其他情况下保持独立和可重用的一种方式

我已经读过,应该通过在片段中声明接口并在活动中实现它们来完成。 这是“仅仅”因为您可以确保活动已准备好进行沟通的最佳方式吗(它确实有处理沟通的方法)

由于我很难在界面(以及java/android中的许多其他东西)上下功夫,这能在没有界面的情况下完成吗?我是否可以在片段中获取对宿主活动的引用,然后调用该活动的方法

(片段类)

(活动课)

或者,在这种情况下,实现接口还有什么我不知道的吗

*编辑*

假设我在另一个活动中重用了该片段。只要该活动还有一个doThatThingToOtherFrag(String myString)方法,我就可以通过getActivity()获取对它的引用,并且仍然可以从片段中调用activity.doThatThingToOtherFrag(String myString),对吗?我不必更改片段代码中的任何内容——或者我在这里遗漏了什么


我想我的问题应该是:接口是否只是为了确保/任何托管活动实现doThatThingToOtherFrag方法?或者在这种情况下,我对接口还有什么不知道的吗?谢谢你的帮助

接口最适合于通信两个片段、两个活动或与任何类通信,因为当其他人想要通信时,接口会同时触发。

接口最适合于通信两个片段、两个活动或与任何类通信,因为当其他人想要通信时,接口同时触发。

这并不是真的必要,但可能是可取的

通常,接口帮助代码不依赖于调用其代码的类。您并不真正关心您正在调用哪个片段类,您真正关心的是,无论您在调用什么,它都需要具有
doThisOrThat()
——这就是您在接口中放置的功能

这种解耦实际上是为了帮助使用多态性。假设您的代码可能使用两个片段类,而您现在使用的是一个片段类,两个片段类都可以使用。在这种情况下,使用接口将帮助您编写更干净的代码,因为您不需要编写重复的代码来调用相同的方法,只需更改将其强制转换为的内容

无论如何,为了真正实现类的解耦,您可能需要了解EventBus(不管是哪种实现)。

这不是必需的,但可能是可取的

通常,接口帮助代码不依赖于调用其代码的类。您并不真正关心您正在调用哪个片段类,您真正关心的是,无论您在调用什么,它都需要具有
doThisOrThat()
——这就是您在接口中放置的功能

这种解耦实际上是为了帮助使用多态性。假设您的代码可能使用两个片段类,而您现在使用的是一个片段类,两个片段类都可以使用。在这种情况下,使用接口将帮助您编写更干净的代码,因为您不需要编写重复的代码来调用相同的方法,只需更改将其强制转换为的内容


无论如何,为了真正解耦类,您可能需要了解EventBus(不管是哪种实现)。

这样您就可以使片段与实现接口的任何活动一起工作。这完全增加了您在问题中指出的独立性和可重用性


如果您要使用activity类的方法“通信”,您将无法使其与其他活动工作(接口),因为它们属于不同的类。

通过这种方式,您可以使片段与实现接口的任何活动工作。这完全增加了您在问题中指出的独立性和可重用性


如果您要使用activity类的方法来“通信”,您将无法使它与其他活动工作(接口),因为它们属于不同的类。

不按上述方式实现的一个很好的理由是松耦合。创建设计良好的软件是一种程序设计模式。我不会在这里对它进行新的讨论,因为StackOverflow中还有很多其他的讨论

请花点时间理解这个概念,因为这将为您节省大量的程序员时间


干杯

不按上述方式实现的一个很好的理由是松耦合。创建设计良好的软件是一种程序设计模式。我不会在这里对它进行新的讨论,因为StackOverflow中还有很多其他的讨论

请花点时间理解这个概念,因为这将为您节省大量的程序员时间

干杯

“编程到接口”是面向对象编程的常见准则。当然,您可以直接与活动进行通信,而无需使用接口。但是,这会在片段和活动之间创建紧密耦合

考虑一种情况,您希望在两个不同的活动中重用相同的片段。使用接口允许灵活地执行此操作

编辑答案:

只要该活动还有一个doThatThingToOtherFrag(String myString)方法,我就可以通过getActivity()获取对它的引用,并且仍然可以从片段中调用activity.doThatThingToOtherFrag(String myString),对吗

我想你的意思是这样的:

Activity activity = getActivity();
activity.doThatThingToOtherFrag(String myString);
这将无法编译,因为
Activi
Fragment otherFragment = getSupportFragmentManager().findFragmentById(R.id.myOtherFrag);

public void doThatThingToOtherFrag(String string) {
//do something to myOtherFrag
}
Activity activity = getActivity();
activity.doThatThingToOtherFrag(String myString);
FragmentCommunicationInterface activity = (FragmentCommunicationInterface) getActivity();
activity.doThatThingToOtherFrag(String myString);
public class MyFragment extends Fragment {
    private FragmentCommunicationInterface communication;

    public MyFragment(FragmentCommunicationInterface communication) {
        this.communication = communication;
    }
}
MyFragment frag = new MyFragment(this);