Как изменить фрагмент из другого фрагмента и применить его к макету main_content? - PullRequest
0 голосов
/ 08 июня 2018

Я борюсь со сменой фрагмента из другого фрагмента.В моем main_activity у меня есть файл макета с нижним навигационным обзором и структурой кадра для содержимого на странице.Переход от фрагмента к фрагменту в навигационном представлении работает нормально, но если я получаю доступ к новому «субфрагменту» из фрагмента, новый фрагмент прозрачен.

Есть предложения?приведенный ниже код из моего фрагмента и моей основной активности.

MainActivity parentActivity = (MainActivity) getActivity();
            parentActivity.switchContent(new VisArrangementInfo(), data, true);

switchContent внутри MainActivity:

public void switchContent(final Fragment fragment, Bundle data, final Boolean addToBackStackOption){
getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.content_frame, fragment)
                .addToBackStack(null)
                .commit();

}

Идентификатор content_frame - это идентификатор файла макета для моей MainActivity.нижний навигационный вид и структура кадра находятся в этом файле.идентификатор для структуры кадра - "main_frame".

После моего понимания я хотел бы изменить "main_frame", а не "content_fram", поскольку именно здесь должен быть основной контент.Когда я делаю это, я не могу найти макет для фрагмента, который я пытаюсь открыть вообще.Это потому, что я пытаюсь заменить структуру кадра вместо всего макета?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

В вашем Fragment A определите интерфейс.

public interface FragmentEventListener {
    void onFragmentChangeEvent(Fragment newFragment);
}

private FragmentEventListener listener;
public void setEventListener(FragmentEventListener listener) {
    this.listener = listener;
}

В вашем фрагменте, когда вы хотите изменить фрагмент, вызовите метод.

if (listener != null) {
    listener.onFragmentChangeEvent(FragmentB);
}

В вашей основной деятельности, внедрите FragmentEventListener, чтобы вы могли переключиться на Fragment B с MainActivity.

public class MainActivity  implements FragmentA.FragmentEventListener {
...
...
fragmentB.setEventListener(this); // here identify the listener.
....

@Override
public void onFragmentChangeEvent(Fragment newFragment) {
    switchContent  // Switch to Fragment B here
}
0 голосов
/ 08 июня 2018

В первый раз используйте add вместо replace:

public void switchContent(final Fragment fragment, Bundle data, final Boolean addToBackStackOption){
getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.content_frame, fragment)
                .addToBackStack(null)
                .commit();

}
...