我已经实现了主从 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/