2016-03-20 14 views
-1

まず最初に、私は多くを検索しましたが、解決策は機能しませんでした。使用される設計libには、23.1.1アンドロイドTabLayoutとViewPagerがフラグメント内で機能しない

// 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> 

//フラグメント

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のアダプタ

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]; 
    } 
} 

私はアプリを実行して、ページをスワイプすると、問題は次のとおりです。 the tab's indicator is in wrong position

+0

ありがとうございます、私は0がパラメータとして無効であることを知っています。実際には、私の質問はフラグメントと一緒にViewPagerとTabLayoutを一緒に使用することです。とにかく、thx –

+0

私はfragment.xmlでCoordinatorLayoutを使用しますが、幸運なことはありません –

+0

私はこの問題で説明した状況は、あなたたちはこれに来る? –

答えて

0

はこれを試してください: -

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

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

の代わりに、 : -

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

    } 
}); 
+0

私は試しましたが、幸運なことはありません。バグはまだそこにある、thx –

0

私は最終的にあなた自身のフラグメントにそれを変更 我々だけで、簡単にするために、この場合の

new Fragment(); 

を使用することはできません、ポイントを見つけ、あなたのすべての皆さんに感謝します。

関連する問題