java.lang.IllegalStateException: Impossible de changer la balise du fragment
Salut, je reçois cette erreur lors de l'utilisation d'un pageViwer et l'Adaptateur pour glisser à travers les 3 fragments.
voici mon pageAdapter
public class FreedomPageAdapter extends FragmentPagerAdapter {
private List<Fragment> listFragment;
public FreedomPageAdapter(FragmentManager fm, List<Fragment> listFragment) {
super(fm);
this.listFragment = listFragment;
}
/*
* (non-Javadoc)
*
* @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
*/
@Override
public Fragment getItem(int position) {
//TODO Auto-generated method stub
return listFragment.get(position);
}
/*
* (non-Javadoc)
*
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
//TODO Auto-generated method stub
return listFragment.size();
}
voici comment je définis la consultation de la page
viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setOnPageChangeListener(this);
savedListFragment = new SubscribedFragment();
fragmentList.add(savedListFragment);
fragmentList.add(savedListFragment);
fragmentList.add(savedListFragment);
viewPager.setAdapter(new FreedomPageAdapter(fragmentManager(),
fragmentList));
private FragmentManager fragmentManager() {
return getSupportFragmentManager();
}
private FragmentTransaction getFragmentTransaction() {
return fragmentManager().beginTransaction();
}
affichage de la page auditeur
/*
* (non-Javadoc)
*
* @see android.support.v4.view.ViewPager.OnPageChangeListener#
* onPageScrollStateChanged(int)
*/
@Override
public void onPageScrollStateChanged(int arg0) {
}
/*
* (non-Javadoc)
*
* @see
* android.support.v4.view.ViewPager.OnPageChangeListener#onPageScrolled
* (int, float, int)
*/
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
/*
* (non-Javadoc)
*
* @see
* android.support.v4.view.ViewPager.OnPageChangeListener#onPageSelected
* (int)
*/
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
Custom fragment d'objet
public class SubscribedFragment extends Fragment{
/* (non-Javadoc)
* @see android.app.Fragment#onCreate(android.os.Bundle)
*/
@Override
public void onCreate(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
/* (non-Javadoc)
* @see android.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//TODO Auto-generated method stub
return inflater.inflate(R.layout.discussion_list_layout, container);
}
}
Plein de trace de pile d'erreur:
05-02 19:15:44.599: E/AndroidRuntime(19839): FATAL EXCEPTION: main
05-02 19:15:44.599: E/AndroidRuntime(19839): java.lang.IllegalStateException: Can't change tag of fragment SubscribedFragment{41157420 id=0x7f070005 android:switcher:2131165189:0}: was android:switcher:2131165189:0 now android:switcher:2131165189:1
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:398)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.support.v4.app.BackStackRecord.add(BackStackRecord.java:389)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:99)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:800)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.support.v4.view.ViewPager.populate(ViewPager.java:991)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.support.v4.view.ViewPager.populate(ViewPager.java:880)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1374)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.View.measure(View.java:15518)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.View.measure(View.java:15518)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.View.measure(View.java:15518)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-02 19:15:44.599: E/AndroidRuntime(19839): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2434)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.View.measure(View.java:15518)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.Choreographer.doCallbacks(Choreographer.java:562)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.Choreographer.doFrame(Choreographer.java:532)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.os.Handler.handleCallback(Handler.java:725)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.os.Handler.dispatchMessage(Handler.java:92)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.os.Looper.loop(Looper.java:137)
05-02 19:15:44.599: E/AndroidRuntime(19839): at android.app.ActivityThread.main(ActivityThread.java:5226)
05-02 19:15:44.599: E/AndroidRuntime(19839): at java.lang.reflect.Method.invokeNative(Native Method)
05-02 19:15:44.599: E/AndroidRuntime(19839): at java.lang.reflect.Method.invoke(Method.java:511)
05-02 19:15:44.599: E/AndroidRuntime(19839): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
05-02 19:15:44.599: E/AndroidRuntime(19839): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
05-02 19:15:44.599: E/AndroidRuntime(19839): at dalvik.system.NativeStart.main(Native Method)
source d'informationauteur jonney
Vous devez vous connecter pour publier un commentaire.
C'est probablement parce que vous êtes en train d'ajouter le même fragment instance à trois reprises à la liste. Vous devez créer une nouvelle instance pour chaque page.
Aussi, je vous suggère de regarder dans
FragmentStatePagerAdapter
si vous n'êtes pas trop loin dans le développement. Il peut être un meilleur choix si vous souhaitez actualiser le contenu des fragments de l'activité principale.La méthode suivante doit retourner un fragment de chaque onglet:
Le code est très bien, mais assurez-vous que le listFragment contient trois différents du Fragment, et le fragment n'est pas null.
Vous avez créé une instance de SubscribedFragment() de la classe
et puis vous avez passé la liste de ces objets dans ViewPager de l'Adaptateur:
qui reçoit la Liste de Fragment type dans son constructeur. Depuis le constructeur reçoit la Liste de Fragment type, essayez de lancer chaque savedListFragment dans le Fragment avant de l'ajouter à la liste et de le passer à l'adaptateur constructeur: