更新devise支持库后TabLayout丢失

我昨天将devise支持库从版本22.2.0更新到了22.2.1,而且我正面临一个使用TabLayout的奇怪行为。 在版本22.2.0,TabLayout工作得很好,但现在它不显示在我的碎片,除非我旋转我的手机(然后它出现)。 我没有改变我的代码,它只是停止工作。

这里是片段:

 public class FriendFragment extends Fragment { @Bind(R.id.friendPager) ViewPager viewPager; @Bind(R.id.friendSlideTab) TabLayout tabLayout; ... @Override public void onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_friend,container,false); ButterKnife.bind(this,v); return v; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); list.add(new SlideFragment(getString(R.string.my_friends), new MyFriendsFragment())); list.add(new SlideFragment(getString(R.string.add_friend), new SearchFriendFragment())); adapter = new FragmentSliderAdapter(list, getChildFragmentManager()); viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(viewPager); } <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> <android.support.design.widget.TabLayout android:id="@+id/friendSlideTab" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/friendPager" android:layout_width="match_parent" android:layout_height="0px" android:layout_weight="1" /> </LinearLayout> 

我使用ButterKnife,不要以为它会在以前的版本中有所作为。

感谢和任何帮助,将不胜感激!

Solutions Collecting From Web of "更新devise支持库后TabLayout丢失"

我提到了Google代码上的错误,但是有一个解决方法:在我的onViewCreated方法中,我添加了:

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

有同样的问题,并认为我疯了,为什么一个工作TabLayout突然爆发。 阅读谷歌代码上的问题,但发现接受的解决scheme不适用于非棒棒糖设备。

但在问题线程中提交的另一个解决scheme适用于较旧的API: 其他解决scheme

 tabLayout.post(new Runnable() { @Override public void run() { tabLayout.setupWithViewPager(pager); } }); 

希望它能在未来的图书馆版本中得到修复。

编辑(2015年8月31日):我已经testing了支持devise库的新v23,看起来它已经被修复(在棒棒糖和KitKat上testing过)。 现在不需要产生线程:)