Интерфейс связи между двумя фрагментами - PullRequest
0 голосов
/ 14 марта 2019

Я реализовал представление мастера-детали.Два больших фрагмента отображаются рядом на большом 10-дюймовом экране. Фрагмент A Отображение списка заказов.Когда заказ выбран, детали этого заказа отображаются в Фрагмент B .Во фрагментах Б после обработки заказа.Я хочу уведомить Фрагмент A , чтобы обновить пользовательский интерфейс и раскрасить обработанный заказ в списке заказов.

В настоящее время я пытался создать интерфейс в Фрагмент B реализация интерфейса в Фрагмент A .Однако этот метод, похоже, не работает, поскольку при попытке установить экземпляр интерфейса в методе onAttach происходит сбой приложения, поскольку контекст все еще является контекстом Фрагмент 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());
    }
}

Как мне это сделать.

1 Ответ

4 голосов
/ 14 марта 2019

Ваши фрагменты хранятся в Activity, и это действие передается onAttach(). Таким образом, ваша деятельность должна нести ответственность за распределение связи между вашими фрагментами.

Итак, во FragmentB вы подключаете свою активность к интерфейсу слушателя, когда вы подключены:

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

И вы реализуете интерфейс в своей деятельности:

public class MyActivity implements OnStockAddedListener {

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

        fragmentA.handleStockAdded(stock);
    }
}

И вы получаете эти сообщения во Фрагменте А:

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. Все течет через деятельность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...