8

昨天我更新了設計支持庫從版本22.2.0到22.2.1,並且我面臨着一個奇怪的行爲TabLayout。 在版本22.2.0上,TabLayout工作得很好,但現在它不會顯示在我的碎片中,除非我旋轉我的手機(然後出現)。 我沒有改變我的代碼,它只是停止工作。更新設計支持庫後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,不認爲這將使因爲在以前的版本,它與它的工作有什麼區別。

感謝和任何幫助,將不勝感激!

+0

你不能向我們展示你的整個XML嗎? –

+0

當然,只是編輯。謝謝。 – Leonardo

+0

你見過:https://github.com/chrisbanes/cheesesquare?我正在使用類似的設置。 –

回答

7

我submited在谷歌代碼中的bug,但對這個問題的解決方法: 在我onViewCreated的方法,我說:

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

      tabLayout.removeOnLayoutChangeListener(this); 
     } 
    }); 
} 
+0

我也有這個問題,你的解決方法的工作原理,謝謝你!你能分享一個谷歌鏈接的鏈接嗎?我想跟隨它。 –

+2

Google resport:https://code.google.com/p/android/issues/detail?id=180462 –

+0

我也有支持庫23.1.1這個問題。您的解決方法不適合我。 – user3749883

2

有同樣的問題,我想我是瘋了,爲什麼工作TabLayout突然爆發。閱讀谷歌代碼上的問題,但發現接受的解決方案不適用於非棒棒糖設備。

但問題線程提交的另一個解決方案爲較舊的API: other solution

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

希望這將是固定在未來圖書館的釋放。

編輯(2015年8月31日):我已經測試了支持設計庫的新v23,它似乎已經修復(在棒棒糖和KitKat上測試過)。現在不需要產生線程:)