Я получаю эту ошибку, когда пытаюсь заменить родительский фрагмент (SearchFragment
) из дочернего фрагмента (ClassroomsTab
) во вкладке смахивания viewPager
. По сути, я пытаюсь добиться того, чтобы у меня было меню с вкладками со множеством кнопок в каждом дочернем фрагменте, которое закрывает меню вкладок смахивания и открывает другой существующий фрагмент. SearchFragment
находится в операции «Навигационный ящик» и является целевым фрагментом кнопок.
Из того, что я прочитал, решение этой проблемы состоит в замене getChildFragmentManager()
в этой строке кода: viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
на getActivity().getSupportFragmentManager()
или getFragmentManager()
. Это решает проблему сбоя приложения, но когда я щелкаю обратно на вкладке поиска через блок навигации из нового фрагмента, большинство дочерних фрагментов вкладки смахивания с кнопками не отображаются.
Спасибо за помощь:)
SearchFragment
OnCreateView
код:
public TabLayout tabLayout;
public ViewPager viewPager;
public static int int_items = 5;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//this inflates the tab layout file.
View view = inflater.inflate(R.layout.search_layout,null);
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
tabLayout = (TabLayout) view.findViewById(R.id.tabs);
viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
// this puts the titles on the top
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
//this preloads the other tabs. currently only have it set to one for testing
viewPager.setOffscreenPageLimit(1);
return view;
}
ClassroomsTab
код (пока на тестировании только одна кнопка):
примечание: content_frame
- это структура кадра навигационной активности
public class ClassroomsTab extends Fragment {
View myView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
myView = inflater.inflate(R.layout.classrooms, container, false);
defineButtons();
return myView;
}
public void defineButtons() {
Button CR1C1 = (Button)myView.findViewById(R.id.CR1C1);
CR1C1.setOnClickListener(buttonClickListener);
}
private View.OnClickListener buttonClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fragmentmanager = getFragmentManager();
switch (view.getId()) {
case R.id.CR1C1:
fragmentmanager.beginTransaction()
.replace(R.id.content_frame
,new MapFragment())
.commit();
break;
}
}
};
Полная ошибка
09-08 15: 52: 13.154 12220-12220 / com.example.jeremy.app E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное
Процесс: com.example.jeremy.app, PID: 12220
java.lang.IllegalArgumentException: не найдено представление для идентификатора 0x7f0800c4 (com.example.jeremy.app:id/content_frame) для фрагмента MapFragment {c7d968f # 2 id = 0x7f0800c4}
на android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1417)
на android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1754)
на android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1822)
на android.support.v4.app.BackStackRecord.executeOps (BackStackRecord.java:797)
на android.support.v4.app.FragmentManagerImpl.executeOps (FragmentManager.java:2591)
на android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManager.java:2378)
на android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (FragmentManager.java:2333)
на android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:2240)
на android.support.v4.app.FragmentManagerImpl $ 1.run (FragmentManager.java:703)
на android.os.Handler.handleCallback (Handler.java:790)
на android.os.Handler.dispatchMessage (Handler.java:99)
на android.os.Looper.loop (Looper.java:164)
на android.app.ActivityThread.main (ActivityThread.java:6494)
в java.lang.reflect.Method.invoke (родной метод)
в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:438)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)