D-D
D-D

Reputation: 966

Android conflict when adding a fragment to activity class

I have defined my fragments class as

import android.support.v4.app.Fragment;
public class UserAccountDetailsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.user_account_details_fragment, container, false);

}}

I have defined my activity as

   import android.support.v4.app.FragmentActivity;
   public class HomeScreenActivity extends FragmentActivity {
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_screen);
    UserAccountDetailsFragment userAccDetailsFrag = new   UserAccountDetailsFragment();

     android.app.FragmentManager fragmentManager = getFragmentManager();
      android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
      fragmentTransaction.add(R.id.fragments, userAccDetailsFrag );
      fragmentTransaction.commit();
    }

The problem is i am not able to add the fragment. It says UserAccountDetailsFragment should be made a fragment. But that class already extends fragments. What am i missing here?

XML---

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".HomeScreenActivity" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

<fragment 
    android:id="@+id/fragments"
      android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world"
    />

Upvotes: 1

Views: 2079

Answers (5)

Damian Petla
Damian Petla

Reputation: 9103

You simply cannot mix Fragment API from regular SDK with android-support SDK.

You have to call getSupportFragmentManager() instead getFragmentManager().

getSupportFragmentManager() returns android.support.v4.app.FragmentManager.

I would also suggest to check first if your fragment is already added and in case your fragment is NOT added to the back stack use setRetainInstance(true) on your fragment.

import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
public class HomeScreenActivity extends FragmentActivity {

    private static final String FRAGMENT_TAG = "custom_tag";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_screen);
    Fragment frag = getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG);
    if (frag == null) {
        UserAccountDetailsFragment userAccDetailsFrag = new   UserAccountDetailsFragment();
        userAccDetailsFrag.setRetainInstance(true);
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.fragments, userAccDetailsFrag, FRAGMENT_TAG);
        fragmentTransaction.commit();
    } 

}

Upvotes: 1

tana
tana

Reputation: 585

you are working with support.v4 package.
you should try the below:

FragmentManager manager=getSupportFragmentManager();
FragmentTransaction transaction=manager.beginTransaction();

Upvotes: 1

Ankit Bisht
Ankit Bisht

Reputation: 1269

      UserAccountDetailsFragment userAccDetailsFrag = new   UserAccountDetailsFragment();
                 FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
        .add(R.id.fragments, userAccDetailsFrag).commit();

try this

Upvotes: 0

Ravind Maurya
Ravind Maurya

Reputation: 977

This is the problem:

android.app.FragmentManager fragmentManager = getFragmentManager(); android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

replace by:

android.support.v4.app.FragmentManager fragmentManager = getFragmentManager(); android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

and use this on in your xml:

<fragment
            android:id="@+id/map_relative_fragment"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            class="com.google.android.gms.maps.SupportMapFragment" />

and mention in manifest those:

 <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

and map key

Upvotes: 0

Akash Moradiya
Akash Moradiya

Reputation: 3322

try thi,

import android.support.v4.app.FragmentActivity;
   public class HomeScreenActivity extends FragmentActivity {
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_screen);
    UserAccountDetailsFragment userAccDetailsFrag = new   UserAccountDetailsFragment();

     android.support.v4.app.FragmentManager fragmentManager = getFragmentManager();
      android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
      fragmentTransaction.add(R.id.fragments, userAccDetailsFrag );
      fragmentTransaction.commit();
    }

this may help you

Upvotes: 0

Related Questions