直到我滑动 ViewPager 标题才会出现
ViewPager Title doesn't appear until I swipe it
我正在学习使用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>
这是"Just clicked the app icon"的截图:
这是我滑动到第二页后的样子:
我真的很沮丧。谢谢!!
我最近也开始遇到这个问题,经过一些测试,我认为我在 Android 的最新支持包更新中发现了一个错误。
问题出现在 com.android.support:appcompat-v7:23.0.0.
尝试将依赖项更改回 com.android.support:appcompat-v7:22.2.1(第二次最新更新),看看是否可行。
不幸的是,我还没有找到任何解决方案来让它与最新的支持包更新一起工作。
这是 com.android.support:appcompat-v7:23.0.0 中出现的问题。你可以参考这里https://code.google.com/p/android/issues/detail?id=183127
其中 link google 支持团队提到该缺陷将在未来的版本中修复。 所以目前解决方案是使用 com.android.support:appcompat-v7:22.2.1
构建项目
更新:如果您可行,那么您可以继续使用@nidheeshdas 提供的另一个解决方案。我试过简单的项目;有效
Activity
的onResume()里面@nidheeshdas的修改方案
viewPager.setCurrentItem(1);
viewPager.postDelayed(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(0);
}
},100);
新更新: 如上述 google 问题跟踪器 link 和 JP Ventura 的评论所述。我已尝试使用新版本的库,问题似乎已解决。
试试这个。它似乎对我有用。
@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。这会使标题出现在页面第一次加载时。
不使用 android.support.v4.view.PagerTabStrip ,而是使用 android.support.design.widget.TabLayout 用于显示 viewPager 的选项卡。它包含在 Google 设计支持库中。
查看此 link 了解更多信息
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);
}
我正在学习使用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>
这是"Just clicked the app icon"的截图:
这是我滑动到第二页后的样子:
我真的很沮丧。谢谢!!
我最近也开始遇到这个问题,经过一些测试,我认为我在 Android 的最新支持包更新中发现了一个错误。
问题出现在 com.android.support:appcompat-v7:23.0.0.
尝试将依赖项更改回 com.android.support:appcompat-v7:22.2.1(第二次最新更新),看看是否可行。
不幸的是,我还没有找到任何解决方案来让它与最新的支持包更新一起工作。
这是 com.android.support:appcompat-v7:23.0.0 中出现的问题。你可以参考这里https://code.google.com/p/android/issues/detail?id=183127
其中 link google 支持团队提到该缺陷将在未来的版本中修复。 所以目前解决方案是使用 com.android.support:appcompat-v7:22.2.1
构建项目更新:如果您可行,那么您可以继续使用@nidheeshdas 提供的另一个解决方案。我试过简单的项目;有效 Activity
的onResume()里面@nidheeshdas的修改方案viewPager.setCurrentItem(1);
viewPager.postDelayed(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(0);
}
},100);
新更新: 如上述 google 问题跟踪器 link 和 JP Ventura 的评论所述。我已尝试使用新版本的库,问题似乎已解决。
试试这个。它似乎对我有用。
@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。这会使标题出现在页面第一次加载时。
不使用 android.support.v4.view.PagerTabStrip ,而是使用 android.support.design.widget.TabLayout 用于显示 viewPager 的选项卡。它包含在 Google 设计支持库中。
查看此 link 了解更多信息 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);
}