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> 

Я использую нож для масла, не думаю, было бы никакой разницы, так как в предыдущей версии он работал с ним.

Спасибо и любая помощь будет оценена!

+0

Можете ли вы показать нам весь ваш XML? –

+0

Конечно, только что отредактирован. Спасибо. – Leonardo

+0

Вы видели: https://github.com/chrisbanes/cheesesquare? Я использую аналогичную настройку. –

ответ

7

Я занесена ошибка на коде 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); 
     } 
    }); 
} 
+0

У меня тоже была эта проблема, ваше обходное решение работает, спасибо за это! Можете ли вы поделиться ссылкой на ошибку Google? Я хотел бы следить за ним. –

+2

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

+0

У меня также есть эта проблема с поддержкой библиотеки 23.1.1. Ваше обходное решение для меня не работает. – user3749883

2

Если бы тот же вопрос, и думал, что я сошел с ума о том, почему рабочем TabLayout внезапно сломался. Прочтите проблему в Google Code, но обнаружили, что принятое решение не работает на устройствах, отличных от Lollipop.

Но другое решение представлено в выпуске нити работал на старых API: other solution

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

Надеюсь, это будет исправлено в будущих версиях библиотеки.

EDIT (31/08/2015): Я тестировал новый v23 библиотеки Design Design, и кажется, что он исправлен (проверен на Lollipop и KitKat). Нет необходимости запускать нить сейчас :)

Смежные вопросы