2016-03-20 13 views
-1

Zunächst suchte ich viel, aber die Lösungen sind nicht funktioniert, also bin ich hier um Hilfe. das Design lib verwendete 23.1.1android TabLayout und ViewPager funktioniert nicht in Fragment

// MainActivity

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

// main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent"> 

<fragment 
    class = "com.tablayoutfragmenttest.FragmentTest" 
    android:id="@+id/hahah" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

</LinearLayout> 

// Fragment

public class FragmentTest extends Fragment { 

private TabLayout mTablayout; 
private ViewPager mVp; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    View v = inflater.inflate(R.layout.fragment, container, false); 
    mTablayout = (TabLayout)v.findViewById(R.id.bizfrag_tabs_id); 
    mTablayout.setTabMode(TabLayout.MODE_SCROLLABLE); 
    mVp = (ViewPager)v.findViewById(R.id.bizfrag_vp_id); 
    mVp.setAdapter(new MyAdapter(getChildFragmentManager())); 
    mVp.setOffscreenPageLimit(0); 
    //mTablayout.setupWithViewPager(mVp); 
    //mTablayout.post(new Runnable() { 
    //  @Override 
    //  public void run() { 
    //    if (ViewCompat.isLaidOut(mTablayout)) { 
    //     mTablayout.setupWithViewPager(mVp); 
    //    } else { 
    //     mTablayout.addOnLayoutChangeListener(
    //       new View.OnLayoutChangeListener() { 
    //       @Override 
    //       public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
    //       mTablayout.setupWithViewPager(mVp); 
    //        
    //      mTablayout.removeOnLayoutChangeListener(this); 
    //      } 
    //     }); 
    //    } 
    //   } 
    //  }); 


    return v; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    mTablayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mTablayout.setupWithViewPager(mVp); 

     } 
    }); 
} 
} 

//fragment.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent" 
android:orientation="vertical"> 
    <android.support.design.widget.TabLayout 
     android:id="@+id/bizfrag_tabs_id" 
     android:layout_width="match_parent" 
     android:layout_height="40dp"/> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/bizfrag_vp_id" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</LinearLayout> 

// ViewPager des Adapters

public class MyAdapter extends FragmentStatePagerAdapter { 

    public static String[] totalPossibleTabs = new String[]{"this is tab0", "this is tab1", "this is tab2", "this is tab3", "this is tab4", "this is tab5", "this is tab6", "this is tab7", "this is tab8", "this is tab9"}; 

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

    @Override 
    public Fragment getItem(int position) { 
     return new Fragment(); 
    } 

    @Override 
    public int getCount() { 
     return totalPossibleTabs.length; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return totalPossibleTabs[position]; 
    } 
} 

wenn ich die app laufen, und ziehen Sie die Seite, das Problem wie folgt: the tab's indicator is in wrong position

+0

danke für den Hinweis, ich weiß, dass die 0 als Parameter ungültig ist. Eigentlich meine Frage ist über die Verwendung von ViewPager und TabLayout zusammen in einem Fragment, thx –

+0

Ich benutze CoordinatorLayout in fragment.xml, aber ohne Glück –

+0

Ich denke, die in dieser Frage beschriebene Situation wird sehr häufig in der üblichen Entwicklung, nicht Kommt ihr dazu? –

Antwort

0

Versuchen Sie folgendes: -

if (ViewCompat.isLaidOut(tabLayout)) { 
    mTablayout.setupWithViewPager(viewPager); 
} else { 
    tabLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
     @Override 
     public void onLayoutChange(...) { 
      mTablayout.setupWithViewPager(viewPager); 

      mTablayout.removeOnLayoutChangeListener(this); 
     } 
    }); 
} 

statt :

mTablayout.post(new Runnable() { 
    @Override 
    public void run() { 
     mTablayout.setupWithViewPager(mVp); 

    } 
}); 
+0

Ich habe es versucht, aber ohne Glück. Der Fehler ist immer noch da, thx –

0

Danke alle Jungs, finde ich endlich den Punkt, wir nicht

new Fragment(); 

in diesem Fall der Einfachheit halber verwendet werden können, ändern Sie es zu Ihrem eigenen Fragment.

Verwandte Themen