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




android android-fragments (3)

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

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

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

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

Любые причины ошибки? 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;

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


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

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





android-fragments