java - 两个Fragment之间的接口(interface)通信

标签 java android android-fragments

我已经实现了主从 View 。两个 fragment 并排显示在 10 英寸大屏幕上。 fragment A 显示订单列表。选择订单后,该订单的详细信息将显示在 fragment B 中。在处理订单项目后的 fragment B 中。我想通知Fragment A更新UI并为订单列表中已处理的订单着色。

我当前尝试的方法是在 fragment B中创建一个接口(interface),实现 fragment A中的接口(interface)。但是,此方法似乎不起作用,因为当我尝试在 onAttach 方法中设置接口(interface)实例时,应用程序崩溃,因为上下文仍然是 Fragment A 的上下文。

@Override
public void onAttach(@NonNull Context context)
{
    super.onAttach(context);

    if (context instanceof OnStockAddedListener)
    {
        onStockAddedListener = (OnStockAddedListener) this.getActivity();

    } else
    {
        throw new ClassCastException(context.toString());
    }
}

我怎样才能做到这一点。

最佳答案

您的 fragment 托管在 Activity 中,该 Activity 会传递给 onAttach()。因此,您的 Activity 需要负责在 fragment 之间调度通信。

因此,在 FragmentB 中,当您附加时,您将 Activity 转换到监听器接口(interface):

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    this.onStockAddedListener = (OnStockAddedListener) context;
}

并且您在 Activity 中实现该接口(interface):

public class MyActivity implements OnStockAddedListener {

    @Override
    public void onStockAdded(Stock stock) {
        FragmentA fragmentA = (FragmentA) getSupportFragmentManager()
                .findFragmentByTag(/* insert tag here */);

        fragmentA.handleStockAdded(stock);
    }
}

您会在 FragmentA 中收到这些消息:

public class FragmentA {

    public void handleStockAdded(Stock stock) {
        // update ui, or whatever else you need
    }
}

最主要的是不要考虑 FragmentA 与 FragmentB 对话,或者 FragmentB 与 FragmentA 对话。相反,FragmentA 和 FragmentB 都与 Activity 通信,并且 Activity 可以(根据需要)与 FragmentA 或 FragmentB 通信。一切都在 Activity 中流动。

关于java - 两个Fragment之间的接口(interface)通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55151557/

相关文章:

javascript - 如何在导入JSP中获取主机协议(protocol)

android - 使用 ratingBarStyleSmall 样式时,ratingbar 不工作(不可点击)

java - Android布局文件不允许&、<、>等字符

java - 将文件作为链接而不是邮件中的附件发送

java - 无法从 Java 连接到在 Docker 中运行的 Kafka

android - MountEmulatedStorage() Zygote SELinux get_category 在 android studio 中的错误

android - 如何以编程方式更改 MvxTabsFragmentActivity 中的选项卡?

android - 从 FragmentStack 中移除中间 fragment

android - Fragment 和 Activity 之间的通信

用于 FileNameFilter 实现的 Java 正则表达式