Fragment add or replace not working

JavaAndroidAndroid Fragments

Java Problem Overview


I'm using the code from this reference.

When I put in that code in my program I get an error as seen in the picture below. enter image description here

Any reasons for the error? The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, ExampleFragments)

Code from my main activity:

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);
    }
}

Here:

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;

Java Solutions


Solution 1 - Java

The problem here is that you're mixing android.support.v4.app.Fragment and android.app.Fragment. You need to convert all uses to use the support library, which also means calling getSupportFragmentManager().

Something like this, for example:

    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();

It is important to note that the support library Fragment and the normal Fragment are NOT interchangeable. They achieve the same purpose, but they cannot be replaced with one another in code.

Solution 2 - Java

Although this question may have been answered, it should be noted that the solution to overlapping fragments is to get the fragment ID (actually the FrameLayout id as declaring in your xml will lead to headaches) with a fresh "Fragment" instance:

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

I can't tell you how many hours I spent going through post after post with no solution. I read your other post that's linked in the comments above and I'm going to answer there as well just in case someone finds that first.

For those who are getting a ClassCastException, try this as well. You can have all the right libraries added, using FragmentActivity instead of Fragment, and have getActivity().getSupportFragmentManager in your code to stop errors in a ListFragment and you'll still run into problems with Fragments. Google docs don't show you everything, and Eclipse code completion will not always save you...sometimes you just have to fix the bug yourself!!

Solution 3 - Java

No matter what I tried (including the ones written here), I could not solve this issue until I saw this answer

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

Solution 4 - Java

Thisworked for me

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

Solution 5 - Java

Try it

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEGHDKView Question on Stackoverflow
Solution 1 - JavaCatView Answer on Stackoverflow
Solution 2 - JavawhyozView Answer on Stackoverflow
Solution 3 - JavaAlpaslanView Answer on Stackoverflow
Solution 4 - JavaMudasarView Answer on Stackoverflow
Solution 5 - JavaOm Prakash SharmaView Answer on Stackoverflow