Заголовок ViewPager не отображается, пока я не проведу его
Я изучаю использование ViewPager и PagerTabStrip для реализации панели навигации. Я реализовал его, моя проблема в том, что каждый раз, когда я открываю приложение в новом окне, заголовки не отображаются, но после того, как я один раз ударил его, все заголовки снова появляются, а потом все нормально.
код, показанный ниже:
Индивидуальный адаптер
public class MyPagerAdapter extends PagerAdapter {
private List<View> viewList;
private List<String> titleList;
public MyPagerAdapter(List<View> viewList, List<String> titleList){
this.viewList = viewList;
this.titleList = titleList;
}
@Override
public int getCount() {
return viewList.size();
}
@Override
public boolean isViewFromObject(View view, Object o) {
return view == o;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewList.get(position));
return viewList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewList.get(position));
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
}
.xml Файл:
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<android.support.v4.view.PagerTabStrip
android:id="@+id/tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
/>
</android.support.v4.view.ViewPager>
Это скриншот "Просто щелкнул значок приложения":
![введите описание изображения здесь]()
И это после того, как я нажал на вторую страницу:
![введите описание изображения здесь]()
Я действительно расстроен. Спасибо!!
Ответы
Ответ 1
Это проблема, появившаяся в com.android.support:appcompat-v7:23.0.0. Вы можете обратиться сюда https://code.google.com/p/android/issues/detail?id=183127
В этой связи команда поддержки Google указала, что в будущих выпусках будет исправлен дефект. Так что на данный момент решение построит проект, используя com.android.support:appcompat-v7:22.2.1
Обновление: если это возможно для вас, вы можете перейти к другому решению, предоставленному @nidheeshdas. Я пробовал простой проект; он работает
Модифицированное решение @nidheeshdas внутри onResume() Activity
viewPager.setCurrentItem(1);
viewPager.postDelayed(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(0);
}
},100);
Новое обновление: Как упоминалось в приведенной выше ссылке трекера google и комментарии от JP Ventura. Я попытался с новой версией библиотеки, и проблема кажется исправленной.
Ответ 2
Вместо использования android.support.v4.view.PagerTabStrip используйте android.support.design.widget.TabLayout для отображения вкладок для viewPager. Он включен в библиотеку поддержки дизайна Google.
См. эту ссылку для получения дополнительной информации
http://android-developers.blogspot.in/2015/05/android-design-support-library.html
Всего несколько строк:
viewPager=(ViewPager)v.findViewById(R.id.viewPager);
ViewPagerAdapter adapter=new ViewPagerAdapter(this.getChildFragmentManager(),doctor);
adapter.setViewPagerFragmentListener(this);
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager); //Sync Tabs with viewPager
tabLayout.setTabsFromPagerAdapter(adapter); //Setup tabs titles
И для изменения заголовков используйте следующий код в ViewPagerAdapter
@Override
public CharSequence getPageTitle(int position) {
switch (position){
case 0:
return "Title 1";
case 1:
return "Title 2";
case 2:
return "Title 3";
}
return super.getPageTitle(position);
}
Ответ 3
У меня также недавно появилась эта проблема, и после небольшого тестирования я думаю, что обнаружил ошибку в обновлении пакета обновления для Android.
Проблема заключается в том, что она находится в com.android.support:appcompat-v7:23.0.0.
Попробуйте изменить зависимость до com.android.support:appcompat-v7:22.2.1 (второе последнее обновление) и посмотрите, работает ли это.
К сожалению, я еще не нашел решения, чтобы заставить его работать с последним обновлением пакета поддержки.
Ответ 4
Попробуйте это. Кажется, он работает для меня.
@Override
protected void onResume() {
super.onResume();
pager.setCurrentItem(1);
Task.delay(500).continueWith(new Continuation<Void, Object>() {
@Override
public Object then(Task<Void> task) throws Exception {
pager.setCurrentItem(0);
return null;
}
}, Task.UI_THREAD_EXECUTOR);
}
onResume устанавливает пейджер в 1, а затем обратно на 0. Это означает, что заголовок появляется, когда страница загружается в первый раз.