1

J'utilise viewpager avec onglet action bar et je suis avoir deux fragments dans la mise en page, et le problème est que je reçois classe-cast-exceptionFragment et ViewPager ClassCastException

mon fichier xml est ressembler à ceci:

<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="horizontal" > 

     <android.support.v4.view.ViewPager 
      android:id="@+id/pager" 
      android:layout_width="0px" 
      android:layout_height="match_parent" 
      android:layout_weight="2.5" /> 

     <FrameLayout 
      android:id="@+id/fragment_details" 
      android:layout_width="0px" 
      android:layout_height="match_parent" 
      android:layout_weight="2" /> 
    </LinearLayout> 

et j'ai deux onglets dans mes chansons d'activité et album.

Il se charge correctement en mode portrait mais, en mode paysage, il affiche une exception de type cast.

12-08 04:30:08.198: E/AndroidRuntime(2166): FATAL EXCEPTION: main 
12-08 04:30:08.198: E/AndroidRuntime(2166): java.lang.ClassCastException: com.nix.music.activity.fragments.SongDetailsFragment 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at com.nix.music.activity.fragments.AlbumFragMent.showDetails(AlbumFragMent.java:81) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at com.nix.music.activity.fragments.AlbumFragMent.access$0(AlbumFragMent.java:77) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at com.nix.music.activity.fragments.AlbumFragMent$1.onItemClick(AlbumFragMent.java:52) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at android.os.Handler.handleCallback(Handler.java:587) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at android.os.Handler.dispatchMessage(Handler.java:92) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at android.os.Looper.loop(Looper.java:123) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at java.lang.reflect.Method.invoke(Method.java:521) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-08 04:30:08.198: E/AndroidRuntime(2166):  at dalvik.system.NativeStart.main(Native Method) 
erreur

est présentée ici

dans le code de classe AlbumFragMent pour le mode dual est

if (mDualPane) { 
    AlbumDetailFragment details = (AlbumDetailFragment) getFragmentManager() 
      .findFragmentById(R.id.fragment_details); 
    if (details == null || details.getShownIndex() != index) { 
     // Make new fragment to show this selection. 
     details = AlbumDetailFragment.newInstance(index); 

     // Execute a transaction, replacing any existing fragment 
     // with this one inside the frame. 
     FragmentTransaction ft = getFragmentManager() 
       .beginTransaction(); 
     ft.replace(R.id.fragment_details, details); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     ft.commit(); 

    } 
} 

et SongFragment classe

if (mDualPane) { 
    getListView().setItemChecked(index, true); 

    SongDetailsFragment details = (SongDetailsFragment) getFragmentManager() 
      .findFragmentById(R.id.fragment_details); 
    if (details == null || details.getShownIndex() != index) { 
     // Make new fragment to show this selection. 
     details = SongDetailsFragment.newInstance(index); 

     // Execute a transaction, replacing any existing fragment 
     // with this one inside the frame. 
     FragmentTransaction ft = getFragmentManager() 
       .beginTransaction(); 
     ft.replace(R.id.fragment_details, details); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     ft.commit(); 
    } 
} 

seule différence dans les deux est le fragment de détail classe qui appelle.

Est-ce que je fais mal?

Y a-t-il autre chose dont nous devons nous occuper?

Répondre

0

okay je résous cela ... la solution est un peu bizarre mais fonctionne pour moi.

J'ai décidé d'utiliser la classe de fragments de détails commune plutôt que d'avoir une classe de fragments séparée pour chaque onglet. et affiche le contenu en fonction de la sélection en cours.