Подтвердить что ты не робот

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

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

Когда я вставляю этот код в свою программу, я получаю сообщение об ошибке, как показано на рисунке ниже. 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;
4b9b3361

Ответ 1

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

Ответ 2

Несмотря на то, что на этот вопрос, возможно, был дан ответ, следует отметить, что решение для перекрытия фрагментов состоит в том, чтобы получить идентификатор фрагмента (фактически, идентификатор 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 не всегда спасет вас... иногда вам просто нужно исправить ошибку самостоятельно.

Ответ 3

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

fooobar.com/questions/58665/...

Ответ 4

Thisworked for me

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

Ответ 5

Попытайся

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