[英]Interface communication between two Fragments
我已經實現了主從視圖。 在10英寸大屏幕上並排顯示兩個片段。 片段A顯示訂單列表。 選擇訂單后,該訂單的詳細信息將顯示在片段B中 。 在片段B中處理了訂單項之后。 我想通知片段A更新UI,並在訂單列表中為已處理的訂單上色。
我已經嘗試過的當前方法是創造在片段B實現在片段A的接口的接口。 但是,此方法似乎不起作用,因為當我嘗試在onAttach方法中設置接口的實例時,應用程序崩潰了,因為上下文仍然是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());
}
}
我該怎么做。
您的片段托管在一個Activity
,該活動就是傳遞給onAttach()
。 因此,您的活動需要負責在片段之間調度通信。
因此,在FragmentB中,連接后將Activity投射到偵聽器接口:
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.onStockAddedListener = (OnStockAddedListener) context;
}
然后在Activity中實現接口:
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對話。 一切都流經活動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.