web-dev-qa-db-fra.com

java.lang.IllegalArgumentException: Aucune vue trouvée pour l'id 0x1020002 (Android: id/content) pour le fragment

J'essaie de passer d'un fragment à un autre. Il indique l'erreur suivante lors de la transaction d'un fragment.

    Java.lang.IllegalArgumentException: No view found for id 0x1020002 (Android:id/content) for fragment PhotosFragment2{41a57218 #3 id=0x1020002}
            at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:930)
            at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1115)
            at Android.support.v4.app.BackStackRecord.run(BackStackRecord.Java:682)
            at Android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:1478)
            at Android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.Java:446)
            at Android.os.Handler.handleCallback(Handler.Java:615)
            at Android.os.Handler.dispatchMessage(Handler.Java:92)
            at Android.os.Looper.loop(Looper.Java:153)
            at Android.app.ActivityThread.main(ActivityThread.Java:5086)
            at Java.lang.reflect.Method.invokeNative(Native Method)
            at Java.lang.reflect.Method.invoke(Method.Java:511)
            at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:821)
            at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:584)
            at dalvik.system.NativeStart.main(Native Method)

Ci-dessous sont les classes.J'ai utilisé le code suivant pour fragment transaction

Fragment fragment = new PhotosFragment2();

                        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                        fragmentTransaction.replace(Android.R.id.content, fragment);
                        fragmentTransaction.commit();

PhotosFragment.Java

   public class PhotosFragment extends Fragment {
        private FragmentActivity myContext;
        @Override
        public void onAttach(Activity activity) {
            myContext = (FragmentActivity) activity;
            super.onAttach(activity);
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.photos, container, false);

            rootView.setVerticalScrollBarEnabled(false);
            int[] mThumbIds = {
                    R.drawable.album8, R.drawable.album3,
                    R.drawable.album4, R.drawable.album8,
                    R.drawable.album6, R.drawable.album7,
                    R.drawable.album12, R.drawable.album10,
            };

            int[] mThumbIds2 = {
                    R.drawable.album8, R.drawable.album3,
                    R.drawable.album4,
                    R.drawable.album6, R.drawable.album7,
                    R.drawable.album9, R.drawable.album10,
                    R.drawable.album11, R.drawable.album12, R.drawable.album8,
                    R.drawable.album8, R.drawable.album3,
                    R.drawable.album4,
                    R.drawable.album6, R.drawable.album7,
                    R.drawable.album9, R.drawable.album10,
                    R.drawable.album11, R.drawable.album12, R.drawable.album8,
            };

            CustomGridSingle2 adapter = new CustomGridSingle2(myContext, mThumbIds);
            GridView grid = (GridView)rootView.findViewById(R.id.gridView);
            final ImageView img= (ImageView)rootView.findViewById(R.id.imageView7);
            grid.setFocusable(false);

            grid.setAdapter(adapter);
    grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Fragment fragment = new PhotosFragment2();

            FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
            fragmentTransaction.replace(Android.R.id.content, fragment);
            fragmentTransaction.commit();
        }
    });
            CustomGridSingle2 adapter2 = new CustomGridSingle2(myContext, mThumbIds2);
            GridView grid2 = (GridView)rootView.findViewById(R.id.gridView2);
            grid2.setFocusable(false);
            grid2.setAdapter(adapter2);
            grid2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Fragment fragment = new PhotosFragment2();

                    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                    fragmentTransaction.replace(Android.R.id.content, fragment);
                    fragmentTransaction.commit();
                }
            });

            return rootView;
        }


    }

PhotosFragment2.Java

public class PhotosFragment2 extends Fragment {
    private FragmentActivity myContext;
    @Override
    public void onAttach(Activity activity) {
        myContext = (FragmentActivity) activity;
        super.onAttach(activity);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View rootView = inflater.inflate(R.layout.photos2, container, false);
        myContext.getActionBar().hide();
        return rootView;
    }
}

Fichier XML d'activité

<Android.support.v4.widget.DrawerLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">


    <FrameLayout
        Android:id="@+id/frame_container"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent" />

    <LinearLayout
        Android:id="@+id/left_drawer_view"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_gravity="start"
        Android:background="@drawable/bgmenu"
        Android:orientation="vertical">

        <RelativeLayout
            Android:id="@+id/profilelayout"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_weight="0"
            Android:paddingTop="10dp">


            <ImageView
                Android:id="@+id/drawer_profile_image"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_alignBottom="@+id/drawer_profile_background"
                Android:layout_alignLeft="@+id/drawer_profile_background"
                Android:layout_alignRight="@+id/drawer_profile_background"
                Android:layout_alignTop="@+id/drawer_profile_background"
                Android:layout_marginBottom="7.667dp"
                Android:layout_marginLeft="6.5dp"
                Android:layout_marginRight="8.3dp"
                Android:layout_marginTop="7.667dp"
                Android:scaleType="centerCrop"></ImageView>


            <ImageView
                Android:id="@+id/drawer_profile_background"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_centerHorizontal="true"
                Android:scaleType="centerCrop"
                Android:src="@drawable/profileblock">

            </ImageView>

            <ImageView
                Android:id="@+id/settingicon"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_alignBottom="@+id/drawer_profile_background"
                Android:layout_marginLeft="-15dp"
                Android:layout_toRightOf="@+id/drawer_profile_background"
                Android:background="@drawable/settings" />

            <textview
                Android:id="@+id/username"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_below="@+id/drawer_profile_background"
                Android:layout_centerHorizontal="true"
                Android:layout_marginTop="5dp"
                Android:text="Name"
                Android:textAppearance="?android:attr/textAppearanceListItemSmall"
                Android:textColor="@Android:color/white" />


        </RelativeLayout>


        <ListView
            Android:id="@+id/list_slidermenu"
            style="@style/buttonStyle"
            Android:layout_width="match_parent"
            Android:layout_height="0dp"
            Android:layout_marginTop="30dp"
            Android:layout_weight="2"
            Android:cacheColorHint="@Android:color/transparent"
            Android:choiceMode="singleChoice"
            Android:divider="@Android:color/transparent"
            Android:dividerHeight="1dp"
            Android:listSelector="@Android:color/transparent"
            Android:scrollbars="none" />

    </LinearLayout>
</Android.support.v4.widget.DrawerLayout>
30
Android Developer

Je n'utilise pas getSupportFragmentManager(). J'utilise getChildFragmentManager() et cela a fonctionné pour moi ... vous pouvez l'essayer.

19
NhatVM

Si vous essayez de mettre Fragment dans Fragment, utilisez getChildFragmentManager()

14
Andrei Tr.

Si vous utilisez ViewPager, utilisez getChildFragmentManager () pour l'adaptateur de pageur.

viewPager.setAdapter(new ItemsAdapter(getChildFragmentManager()));
6
georgehardcore

Vous devez définir une vue de contenu dans votre activité à laquelle votre PhotosFragment est attaché.

protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.activity_main);

    //...
}
4
John Cordeiro

Il y a 2 raisons les plus courantes pour ce problème

  1. Spécification de la disposition incorrecte dans setContentView () de la méthode onCreate () 
  2. Une erreur se produit également lors de l’ajout de fragments et de leur ajout à getSupportFragmentManager () au lieu de getChildFragmentManager ().

J'espère que cela aidera

Sommé

3
Summved Jain

je sais que c'est très tard. Mais cela peut fonctionner pour d'autres. 

J'ai déclaré l'identifiant pour chaque mise en page, comme (troisième ligne ci-dessous)

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/container"
1
Bahu

Depuis Android 4.2 (API 17), les fragments imbriqués deviennent disponibles . Voir ceci

Pour placer un fragment dans un autre fragment, utilisez getChildFragmentManager()

Egalement disponible dans la bibliothèque de support.

1
Akbar

Le problème peut être que vous ajoutez un fragment et beginTransaction dans un fragment tel que 

getFragmentManager().beginTransaction().replace(Android.R.id.content, ImageBrowseFragment.newInstance(bundle),"ImageBrowseFragment")
            .addToBackStack(null).commit();

Je viens de changer getFragmentManager() en getActivity().getSupportFragmentManager() 

Alors tout va bien

Lorsque vous ajoutez un fragment dans un fragment, utilisez Android.R.id.content ou Window.ID_Android_CONTENT, je suppose que cela représente le conteneur racine de votre fragment et non l'activité. Alors changez pour getActivity().getSupportFragmentManager() ça marche

0
Bruce too

Cette réponse met en évidence une erreur stupide qui peut survenir lors de l’imbrication de fragments ou lors de la conversion d’activités en fragments.

Si vous essayez de remplacer un fragment dans un fragment par la variable fragmentManager mais que vous ne gonflez pas le fragment parent, cela peut entraîner un problème.

Dans BaseFragment.JavaOnCreateView:

if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .replace(R.id.container, new DifferentFragment())
                    .commit();
        }

return super.onCreateView(inflater, container, savedInstanceState);

Remplacez super.onCreateView(inflater, container, savedInstanceState); En gonflant la mise en page correcte pour le fragment:

        return inflater.inflate(R.layout.base_fragment, container, false);
0
surfer190

Placez ce bloc de code dans la méthode PhotosFragment2 onCreateView:

View rootView = inflater.inflate(R.layout.photos2, null);

au lieu de:

View rootView = inflater.inflate(R.layout.photos2, container, false);
0
John Cordeiro

J'ai eu la même erreur et après avoir essayé beaucoup de choses, j'ai constaté que le problème venait de "id" et de "getActivity (). GetSupportFragmentManager ()".

Avant de mettre en œuvre j'aime ces

txt_more.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    getChildFragmentManager()
                            .beginTransaction()
                            .replace(R.id.content_frame, new OpportunitiesFragment())
                            .commit();                }

            });

Puis j'ai changé pour ces

 txt_more.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
    ## Heading ##
                        getActivity().getSupportFragmentManager()
                                .beginTransaction()
                                .replace(Android.R.id.content, new OpportunitiesFragment())
                                .commit();                }
                });
0
pavithra

dans mon cas je devais changer

ViewGroup root = (ViewGroup) inflater.inflate(R.layout.sample,
                container);

à

ViewGroup root = (ViewGroup) inflater.inflate(R.layout.sample,
                container, false);
0
Omid Aminiva

Si vous utilisez ViewPager avec des fragments (pages) et essayez d’afficher un nouveau fragment d’une page , vous obtiendrez cette erreur. Je pense que vous ne pouvez pas faire référence à un conteneur de Activity à partir de la page de ViewPager.

Dans ce cas, vous devriez appeler getActivity(). Ensuite, dans Activity, écrivez une méthode qui ouvrira un nouveau fragment.

class YourActivity : AppCompatActivity() {

    fun showNewFragment(title: String) {
        val fm = supportFragmentManager
        fm?.beginTransaction()?.apply {
            val fragment = NewFragment.newInstance(title)
            replace(R.id.container, fragment, NewFragment.TAG)
            addToBackStack(null)
        }?.commit()
    }
}

class PageFragment : Fragment() {

    private fun show() {
        (activity as YourActivity).showNewFragment("New fragment")
    }
}    

Si vous appelez getParentFragment() et ajoutez un nouveau fragment, vous placerez un nouveau fragment dans ViewPager:

class ViewPagerFragment : Fragment() {

    fun showNewFragment(title: String) {
        val fm = childFragmentManager
        fm?.beginTransaction()?.apply {
            val fragment = NewFragment.newInstance(title)
            replace(R.id.container, fragment, NewFragment.TAG)
            addToBackStack(null)
        }?.commit()
    }
}

class PageFragment : Fragment() {

    private fun show() {
        (parentFragment as? ViewPagerFragment)?.showNewFragment("New fragment")
    }
}
0
CoolMind