java.lang.IllegalArgumentException: Pas de vue l'identité de la 0x1020002 (android:id/contenu) pour fragment
Je suis en train de passer d'un fragment à l'autre.. Il affiche l'erreur suivante pendant fragment de la transaction
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 de 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;
}
}
Activité fichier xml
<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>
- fragmentTransaction.remplacer(R. id.contenu, fragment);
- montre ne peut pas résoudre le symbole R. id.contenu si je change d'android.R.id.contenu à R. id.contenu
- <FrameLayout> avec l'id
content
doivent être définis dans les ressources xml qui est utilisé dans votre activité. Veuillez consulter la developer.android.com/guide/components/fragments.html sur comment initialiser fragments correctement. android.R est un système interne id - Mon activité consiste en de nombreux fragments, et j'ai utilisé fragment de transaction dans d'autres fragments qui fonctionne bien..ce n'est que dans ces deux fragments de sa ne fonctionne pas...
- Vérifiez tout logcat erreur de mise à jour ci-dessus
No view found for id 0x1020002 (android:id/content) for fragment PhotosFragment2
cette erreur dit qu'il n'y a pas la Vue associée à l'ID donné. ID mène nulle part. une Vue dans certains ressource xml doit être manquant. Essayez de nettoyage de projet et de vérifier vos mises en page- Vous avez besoin d'acquérir le fragment gestionnaire comme ce getActivity().getFragmentManager();
- Cela m'est arrivé sur un téléphone, car l'application n'était pas vérifier si c'est dans le double volet de mode. Par la suite le
fragmentTransaction.replace()
n'avait rien à remplacer ! Bien sûr, sur une tablette, il est à double volet de mode.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous utilisez
fragmentTransaction.replace(R.id.container,fragment)
il va supprimer tous les fragments qui sont déjà dans le récipient et ajouter votre nouveau pour le même conteneur.Maintenant, je peux vous suggérer de 2 choses.Tout d'abord, si vous souhaitez utiliser
fragmentTransaction.replace(android.R.id.content, fragment);
qui vous êtes en train de faire maintenant,alors ne pas définir le contenu de votreActivity
à l'aide desetContentView
.Cela devrait fonctionner ensuite.Savoir ce qu'est exactementandroid.R.id.content
est vous pouvez vous référer cette stackoverflow question et la réponseOu d'autre part, Dans la mise en page de votre
Activity
ont unFrameLayout
dont l'id estcontent
. Et puis utiliserEspère que cette aide.
Plus D'Infos:
De vos commentaires, il semble que vous rencontrez un problème dans l'idée de l'utilisation de
FrameLayout
dans votreActivity
's layout(Pas du tout de laFragment
's layout).À partir de la DocumentsDonc, le but principal de
FrameLayout
est de bloquer l'espace nécessaire pour s'adapter à la plus grande vue d'enfant. Si vous utilisez unFrameLayout
commeFragment
Conteneur vous pouvez vous assurer que vous avez toujours l'espace disponible pour accueillir le plus grandFragment
's layout.De sorte que vous pouvez avoir votre
FrameLayout
quelque chose comme ceci dans votreActivity
's layout xml fichierActivity
ici.Besoin de voir ce que le code que vous avez écrit dans votreActivity
droit maintenant.Vous pouvez avoir un semblableActivity
qui vous êtes maintenant.Juste dans la mise en page fichier xml ajouter unFrameLayout
et lors du remplacement de laFragment
utilisationfragmentTransaction.replace(R.id.content, fragment);
.Fragment
.C'est votreActivity
et sa Mise en page xml. Si vous ne voulez pas vraiment tout contenu à définir pour votreActivity
alors vous n'avez pas à écriresetContentView
dans votreActivity
.Vous pouvez simplement laisser cette ligne.Et puis vous pouvez utiliserfragmentTransaction.replace(android.R.id.content, fragment);
FrameLayout
à votreActivity
's layout qui est responsable de votreFragmetn
s.Ne pas l'ajouter dans votreFragment
's layout lui-même.Je n'utilise pas
getSupportFragmentManager()
.J'utilise
getChildFragmentManager()
et il a travaillé pour moi.Vous pouvez l'essayer.
Si vous essayez de mettre en
Fragment
enFragment
, utilisezgetChildFragmentManager()
Si vous utilisez ViewPager, utilisez getChildFragmentManager() pour pager adaptateur
Vous devez configurer l'affichage du contenu dans votre Activité votre PhotosFragment est attaché.
Il y a 2 raisons les plus courantes de ce problème
Espère que cela aidera
Summved
getFragmentManager()
v4 est de travailler pourreplace
backstack appuyez sur la touche retour. mercije sais que c'est très tard. Mais il peut travailler pour les autres.
J'ai déclaré l'id pour chaque mise en page, comme (3ème ligne ci-dessous)
Depuis Android 4.2 (API 17) imbriqués les fragments deviennent disponibles.
Voir cette
À la place du fragment à l'intérieur d'autres fragment utilisation
getChildFragmentManager()
Également disponibles dans la bibliothèque de prise en charge.
Mettre ce bloc de code dans PhotosFragment2 onCreateView méthode:
au lieu de:
dans mon cas, j'ai dû changer
à
Cette réponse met en évidence une stupide erreur qui peuvent se produire, qui se pose lors de l'imbrication de fragments ou de la conversion des activités à des fragments.
Si vous essayez de remplacer un fragment à l'intérieur d'un fragment avec le
fragmentManager
mais vous êtes gonfle pas le parent fragment qui peuvent causer un problème.Dans BaseFragment.java
OnCreateView
:Remplacer
super.onCreateView(inflater, container, savedInstanceState);
avec de gonflage de la bonne mise en page de fragment:
Le problème peut être que vous ajoutez un fragment et beginTransaction dans certains fragment comme
Je viens de changer
getFragmentManager()
àgetActivity().getSupportFragmentManager()
Alors tout va bien
Lorsque vous ajoutez un fragment dans un fragment de l'utilisation
android.R.id.content
OuWindow.ID_ANDROID_CONTENT
,je suppose qu'il représente le conteneur racine de votre fragment de l'activité. Ainsi le changement degetActivity().getSupportFragmentManager()
œuvres horsJ'ai eu le même message d'erreur et après avoir essayé beaucoup de choses, j'ai trouvé que le problème était avec la "id" et "getActivity().getSupportFragmentManager()".
Avant de me mettre en œuvre que j'aime ces
Puis j'ai changé pour ces
Si vous utilisez
ViewPager
avec des fragments (les pages), et essayer de montrer un nouveau fragment à partir d'une page, vous obtiendrez cette erreur. Je pense que vous ne peut pas faire référence à un conteneur d'unActivity
à partir d'unViewPager
's page.Dans ce cas, vous devez appeler
getActivity()
. Puis dansActivity
écrire une méthode qui vous permettra d'ouvrir un nouveau fragment.Si vous appelez
getParentFragment()
et ajouter un nouveau fragment, puis vous placez un nouveau fragment à l'intérieur deViewPager
: