Не найден вид для id 0x7f0800c4 для фрагмента - PullRequest
0 голосов
/ 08 сентября 2018

Я получаю эту ошибку, когда пытаюсь заменить родительский фрагмент (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)

1 Ответ

0 голосов
/ 08 сентября 2018

Обычно это происходит, когда вы меняете раскладки в нескольких транзакциях. то же самое случилось со мной, и я решил это, очистив стек позади него. но вы должны использовать один FragmentManager для всех ваших транзакций. поставить этот код после того, как вы сделали транзакцию

    private void clearStack() {
    if (fragmentManager.getBackStackEntryCount() > 0) {
        for (int i = 0; i < fragmentManager.getBackStackEntryCount(); i++) {
            fragmentManager.popBackStack();
        }
    }

    if (fragmentManager.getFragments().size() > 0) {
        for (int i = 0; i < fragmentManager.getFragments().size(); i++) {
            Fragment mFragment = fragmentManager.getFragments().get(i);
            if (mFragment != null) {
                fragmentManager.beginTransaction().remove(mFragment).commit();
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...