簡體   English   中英

兩個片段之間的接口通信

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM