it-swarm.com.ru

Фрагмент добавить или заменить не работает

Я использую код из этой ссылки.

Когда я вставляю этот код в свою программу, я получаю сообщение об ошибке, как показано на рисунке ниже .enter image description here

Какие-либо причины для ошибки? The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, ExampleFragments)

Код из моей основной деятельности:

public void red(View view) {
        Android.app.FragmentManager fragmentManager = getFragmentManager();
                Android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        ExampleFragments fragment = new ExampleFragments();
        fragmentTransaction.replace(R.id.frag, fragment);
        fragmentTransaction.commit();
    }

ExampleFragments.Java

package com.example.learn.fragments;

import Android.os.Bundle;
import Android.support.v4.app.Fragment;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;

public class ExampleFragments extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.blue_pill_frag, container, false);
    }
}

Вот:

package com.example.learn.fragments;

import Android.app.Activity;
import Android.os.Bundle;
import Android.support.v4.app.Fragment;
import Android.support.v4.app.FragmentManager;
import Android.support.v4.app.FragmentTransaction;
import Android.view.LayoutInflater;
import Android.view.Menu;
import Android.view.View;
import Android.view.ViewGroup;
54
EGHDK

Проблема в том, что вы смешиваете Android.support.v4.app.Fragment и Android.app.Fragment. Вам необходимо преобразовать все варианты использования библиотеки поддержки, что также означает вызов getSupportFragmentManager().

Примерно так, например:

    Android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
    Android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    ExampleFragments fragment = new ExampleFragments();
    fragmentTransaction.replace(R.id.frag, fragment);
    fragmentTransaction.commit();

Важно отметить, что вспомогательная библиотека Fragment и обычная Fragment НЕ взаимозаменяемы. Они достигают той же цели, но не могут быть заменены друг другом в коде.

162
Eric

Хотя на этот вопрос можно было ответить, следует отметить, что решение перекрывающихся фрагментов состоит в том, чтобы получить идентификатор фрагмента (фактически идентификатор FrameLayout, так как объявление в вашем xml приведет к головным болям) со свежим экземпляром «Fragment»:

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = new ExampleFragments();
fragmentTransaction.replace(R.id.frag, fragment);
fragmentTransaction.commit();

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

Для тех, кто получает ClassCastException, попробуйте это тоже. Вы можете добавить все нужные библиотеки, используя FragmentActivity вместо Fragment, и иметь в своем коде getActivity (). GetSupportFragmentManager, чтобы остановить ошибки в ListFragment, и вы все равно столкнетесь с проблемами с фрагментами. Документы Google не показывают вам все, и завершение кода Eclipse не всегда спасет вас ... иногда вам просто нужно исправить ошибку самостоятельно !!

6
whyoz

Это сработало для меня 

Android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();

0
Mudasar

Попытайся

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
  fragmentTransaction.replace(R.id.frag, new ExampleFragments()).commit();
0
Om Prakash Sharma

Что бы я ни пытался (включая те, что написаны здесь), я не мог решить эту проблему, пока не увидел этот ответ

https://stackoverflow.com/a/5907704/728312

0
Alpaslan