8

Zaktualizowałem bibliotekę wsparcia projektu z wersji 22.2.0 na 22.2.1 wczoraj i mam dziwne zachowanie z TabLayout. W wersji 22.2.0 TabLayout działał dobrze, ale teraz nie pojawia się w moim fragie, chyba że obrócę telefon (wtedy się pojawi). Nie zmieniłem kodu, przestało działać.Brak TabLayout po aktualizacji Biblioteki Wsparcia Projektowego

Oto fragmenty:

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> 

używam butterknife, nie sądzę, by to żadnej różnicy, ponieważ w poprzedniej wersji było z nim pracować.

Dzięki i każda pomoc będzie doceniona!

+0

Nie możesz pokazać nam całego pliku XML? –

+0

Oczywiście, po prostu edytowane. Dziękuję Ci. – Leonardo

+0

Czy widziałeś: https://github.com/chrisbanes/cheesesquare? Używam podobnej konfiguracji. –

Odpowiedz

7

I zgłosił błąd w kodzie Google, ale nie jest to obejście problemu: W mojej metody onViewCreated, dodałem:

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

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

Też miałem ten problem, twoje obejście działa, dzięki za to! Czy możesz udostępnić link do błędu Google? Chciałbym to zrobić. –

+2

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

+0

Mam również ten problem z biblioteką pomocy technicznej 23.1.1. Twoje obejście nie działa dla mnie. – user3749883

2

miał ten sam problem i myślał, że szaleję dlaczego roboczego TabLayout nagle się zepsuł. Przeczytaj problem w Google Code, ale okazało się, że akceptowane rozwiązanie nie działa na urządzeniach innych niż Lollipop.

jednak inne rozwiązanie przedłożone w wątku emisyjnej pracował dla starszych API: other solution

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

Mam nadzieję, że zostanie on rozwiązany w przyszłej wersji biblioteki.

EDYCJA (31/08/2015): Testowałem z nowym v23 biblioteki Support Design Library i wygląda na to, że został naprawiony (przetestowany na Lollipop i KitKat). Nie musisz już odradzać wątku :)