Как получить адаптер из другого фрагмента - PullRequest
0 голосов
/ 07 октября 2018

У меня есть слайд-панель с одним фрагментом внутри, в каждом из которых есть еще один фрагмент (вы увидите на скриншоте).

У меня есть первый раздел (фрагмент 0), в котором хранятся выбранные элементы.в других адаптерах.Как я могу ссылаться на эти фрагменты и адаптеры, чтобы иметь возможность изменять элементы на адаптерах.

Slide

Я храню фрагмент с:

private void setUpOperateOptionSectionItemFragment(OperateModel model, int fragmentPosition){
        LinearLayout container = getSectionContainer();
        activityView.getLaySectionsContainer().addView(container);
        OperateOptionSectionItemFragment fragment = OperateOptionSectionItemFragment.newInstance(model, fragmentPosition, this);
        FragmentManager fragmentManager = activityView.getActivity().getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(container.getId(), fragment, OPERATE_OPTION_FRAGMENT_TAG+fragmentPosition);
        fragmentTransaction.commit();
        operateOptionSectionItemFragmentList.add(fragment);
    }

Когда я нажимаю на элемент адаптеров фрагментов 1, 2, 3 ... Мне нужно добавить или удалить (если существует) элемент в адаптере фрагмента 0.

Как я могу получить доступ к этому адаптеру, как дифференцировать, если я использую один и тот же адаптер для всех.

1 Ответ

0 голосов
/ 07 октября 2018

Вы можете получить доступ к другим фрагментам с помощью обратных вызовов активности.Это будет выглядеть так:

  1. Создать интерфейс

    public interface MyActivityCallback {
        void doSomeWithFragment();
    }
    
  2. Позвольте вашей активности переопределить этот интерфейс

    public MyActivity extends AppCompatActivity implements MyActivityCallback {
        ...
        MyFragment fragment1;
        MyFragment fragment2;
        ...
        void doSomeWithFragment() {
           ...
           fragment1.doSome();
        }
    }
    
  3. Найдите этот интерфейс внутри своего фрагмента.Лучше сделать это внутри onAttach() метода:

    public MyFragment extends Fragment {
        MyActivityCallback callback;
    
        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            callback = (MyActivityCallback) context; // context - is your activity, that added this fragment
        }
        ...
    
        public void someFunction() {
            // here you want to change some in your other fragments:
           callback.doSomeWithFragment();
        }
    }
    

Итак, в нескольких словах:

Activity хранит ссылки на все дочерние элементыфрагменты
Фрагменты хранят ссылки на интерфейсный обратный вызов, который реализуется родительским действием.
Итак, вы вызываете действие, чтобы выполнить некоторые с помощью этого обратного вызова, и действие выполняет эту работу, потому что оно имеет ссылки на все фрагменты.

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