奇怪的是,没有一种方法可以在viewPager适配器中获取所选标签的确切位置,
在instantiateItem
中,您需要确定viewPager中给定标签使用的布局,但position
的{{1}}实际上并不是确切的位置,那么我该如何决定哪个标签被选中并决定要膨胀的xml?
针对同一问题,有很多SO问题已经得到解答,而且它们在Q1都没有意义。
在这个给定的Question中,当我的情况下布局已经膨胀时,获取所选标签位置是没有意义的。
我的尝试:
通过致电instantiateItem
中的getItemPosition()
来取得职位并不工作,始终为-1。
使用instantiateItem
中的实际position
参数获取标签的位置,不会给出奇怪的随机值。
任何解决方案/解决方法?
修改
立即使用HorizontalCoordinatorNtbActivity.java使用活动代码的链接,特别检查第55行
答案 0 :(得分:0)
如果您将Tablayout
与viewPager
一起使用,则此方法可以为您提供帮助。 tabLayout.getSelectedTabPosition()
如果您需要Tab的文本
String tabText=tabLayout.getTabAt(tabLayout.getSelectedTabPosition()).getText().toString();
答案 1 :(得分:0)
奇怪的是,没有一种方法可以获得准确的位置 viewPager适配器中选定选项卡的选项
适配器对适配器视图的状态一无所知,甚至更多 - 它不应该知道这种视图的存在。适配器的唯一目的是准备将由某些东西显示的数据。
如果您的适配器必须知道当前ViewPager
的位置 - 这肯定意味着您的设计存在缺陷。
答案 2 :(得分:0)
position
的{p>instantiateItem
实际上并不是确切的位置
我认为你的意思是position
不是目前选择/显示的位置。
显示的是什么视图并不重要。当用户从第1页滑到第2页时,ViewPager
会加载第3页的视图,以预期下一次用户滑动。
这是一件好事™。这意味着用户将获得更平滑的滑动操作,因为视图已经被夸大了。
因此,当ViewPager
向您的适配器询问第3页的视图时,请为其提供第3页的视图。
现在,当选择/显示视图 时,您可能需要执行一些特殊操作。在这种情况下,你可以检查这个问题的答案(我的答案就是其中之一):
android - How to determine when Fragment becomes visible in ViewPager - Stack Overflow
任何解决方案/解决方法?
解决方案是:
当ViewPager
要求您的适配器查看特定标签的视图时,请对该视图进行充气。
当视图成为当前选定/显示的视图时,根据需要更新视图。
编辑:
寻呼机适配器代码并不神秘或其他:
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
View view;
switch (position) {
case 0: // teacher
// inflate/set up your teacher view
break;
case 1: // student
// inflate/set up your student view
break;
case 2: // search
// inflate/set up your search view
break;
case 3: // chat
// inflate/set up your chat view
break;
default:
throw new IllegalArgumentException("I don't know how to set up tab " + position);
}
container.addView(view);
return view;
}
});
这真实地显示了@Serhio试图说的内容:您不需要知道ViewPager
当前显示的视图;当它向你的适配器询问视图时,你只需给它想要的视图。
而且顺便说一下,当您在寻呼机适配器内部扩展视图时,请确保使用container
作为父级:
view = LayoutInflater.from(
getBaseContext()).inflate(R.layout.item_vp_list, container, false);