3

Récemment, j'ai essayé de créer un aspect avancé pour mes applications en mettant en œuvre plusieurs vues de balayage.Android Multiple Swipe Views

Laissez-moi vous expliquer ce que je veux dire par "multiple vue swipe":

Amazingly drawn demonstration of my goal

Et s'il vous plaît excuser mes faibles compétences en peinture.

Comme vous pouvez le voir, j'essaie simplement d'empiler les vues de balayage les unes sous les autres. Chaque vue de balayage contient différents fragments bien sûr.

J'ai réussi à créer une vue de balayage, mais c'est tout ce que j'ai réussi à faire. Pour créer un swipe-View j'ai créé la classe PagerAdapter qui va de FragmentPagerAdapter:

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int i) { 
     Fragment fragment; 
     switch(i){ 
     case 0: 
      fragment = new MyFragment1(); 
      break; 
     case 1: 
      fragment = new MyFragment2(); 
      break; 
     case 2: 
      fragment = new MyFragment3(); 
      break; 
     default: 
      throw new IllegalArgumentException("Invalid section number"); 
     } 

     return fragment; 
    }} 

La classe nommée "MyFragment1/2/3" est une classe qui crée une vue avec la mise en page correcte:

public static class MyFragment1 extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.simpletab, null); 
     return v; 
} 
} 

J'ai créé un ViewPager et un SectionsPagerAdapter.

SectionsPagerAdapter mSectionsPagerAdapter; 
ViewPager mViewPager; 

En outre, dans la fonction onCreate du MainActivity I ajouté:

 mSectionsPagerAdapter = new SectionsPagerAdapter(
      getSupportFragmentManager()); 


    mViewPager = (ViewPager) findViewById(R.id.comp); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

Et cela me donne le coup-vue. Maintenant, j'ai essayé d'en faire deux alors j'ai écrit une autre classe PagerAdapter qui initie un fragment différent. J'ai aussi créé un nouveau ViewPager et défini comme je l'ai fait pour la première:

SectionsPagerAdapter mSectionsPagerAdapter; 
OtherSectionsPagerAdapter OtherPagerAdapter; 

ViewPager mViewPager; 
ViewPager OtherViewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Set up the action bar. 
    //final ActionBar actionBar = getActionBar(); 
    //actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the app. 
    mSectionsPagerAdapter = new SectionsPagerAdapter(
      getSupportFragmentManager()); 

    OtherPagerAdapter = new OtherSectionsPagerAdapter (getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.comp); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    OtherViewPager= (ViewPager) findViewById(R.id.ScreenPager); 
    OtherViewPager.setAdapter(OtherPagerAdapter); 

Ceci est mon main_activity.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/tools" 
android:id="@+id/LinearLayout1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/ScreenPager" 
    android:layout_width="wrap_content" 
    android:layout_height="150dp" 
    android:fadingEdge="vertical" 
    app:context=".MainActivity" > 
</android.support.v4.view.ViewPager> 

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/comp" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:fadingEdge="vertical" 
    app:context=".MainActivity" > 
</android.support.v4.view.ViewPager></LinearLayout> 

Et si je suis en train d'exécuter l'application, il des accidents. Qu'est-ce que je fais de mal et pourriez-vous me diriger vers la bonne voie?

EDIT: Voici le logcat que je reçois après plantage:

09-22 16:56:14.283: E/AndroidRuntime(8816): FATAL EXCEPTION: main 
09-22 16:56:14.283: E/AndroidRuntime(8816): java.lang.IllegalArgumentException: Invalid section number 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at com.example.casio.MainActivity$compSectionsPagerAdapter.getItem(MainActivity.java:707) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:97) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.support.v4.view.ViewPager.populate(ViewPager.java:1048) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.support.v4.view.ViewPager.populate(ViewPager.java:914) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.View.measure(View.java:15848) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.View.measure(View.java:15848) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.View.measure(View.java:15848) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.View.measure(View.java:15848) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2189) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.View.measure(View.java:15848) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1905) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1104) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1284) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.Choreographer.doFrame(Choreographer.java:532) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.os.Handler.handleCallback(Handler.java:730) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.os.Looper.loop(Looper.java:137) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at java.lang.reflect.Method.invoke(Method.java:525) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-22 16:56:14.283: E/AndroidRuntime(8816):  at dalvik.system.NativeStart.main(Native Method) 
09-22 17:58:20.469: E/AndroidRuntime(12171): FATAL EXCEPTION: main 
09-22 17:58:20.469: E/AndroidRuntime(12171): java.lang.IllegalArgumentException: Invalid section number 
09-22 17:58:20.469: E/AndroidRuntime(12171): at com.example.casio.MainActivity$compSectionsPagerAdapter.getItem(MainActivity.java:707) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:97) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.support.v4.view.ViewPager.populate(ViewPager.java:1048) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.support.v4.view.ViewPager.populate(ViewPager.java:914) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.View.measure(View.java:15848) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.View.measure(View.java:15848) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.View.measure(View.java:15848) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.View.measure(View.java:15848) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2189) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.View.measure(View.java:15848) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1905) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1104) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1284) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.Choreographer.doFrame(Choreographer.java:532) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.os.Handler.handleCallback(Handler.java:730) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.os.Looper.loop(Looper.java:137) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at android.app.ActivityThread.main(ActivityThread.java:5103) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at java.lang.reflect.Method.invokeNative(Native Method) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at java.lang.reflect.Method.invoke(Method.java:525) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-22 17:58:20.469: E/AndroidRuntime(12171): at dalvik.system.NativeStart.main(Native Method) 
+1

Publiez votre Logcat qui génère après Crashing – Rahul

Répondre

1

Supprimer ces lignes de vos deux ViewPagers.

xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
+0

Merci! En faisant cela et en ajustant aussi le nombre de sections que je dois faire correspondre au nombre de fragments de cas dans la fonction getItem(), cela a été corrigé! –

+0

Mon plaisir. :) – Rahul