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


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

когда я вставляю этот код в свою программу, я получаю ошибку, как показано на рисунке ниже. 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;
4   52   2012-07-23 23:58:05

4 ответа:

проблема здесь в том, что вы смешиваете 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 не заменимы. Они достигают одной и той же цели, но не могут быть заменены друг другом в коде.

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

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 не всегда спасет вас...иногда вам просто нужно исправить ошибку самостоятельно!!

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

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

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

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