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>
Je n'utilise pas getSupportFragmentManager()
. J'utilise getChildFragmentManager()
et cela a fonctionné pour moi ... vous pouvez l'essayer.
Si vous essayez de mettre Fragment
dans Fragment
, utilisez getChildFragmentManager()
Si vous utilisez ViewPager, utilisez getChildFragmentManager () pour l'adaptateur de pageur.
viewPager.setAdapter(new ItemsAdapter(getChildFragmentManager()));
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);
//...
}
Il y a 2 raisons les plus courantes pour ce problème
J'espère que cela aidera
Sommé
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"
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.
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
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);
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);
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(); }
});
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);
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")
}
}