选项卡布局在 RTL 中自动滚动到结束
Tab layout scrolls till end automatically in RTL
我的应用程序中有一个选项卡布局。我正在动态添加选项卡。最初添加了两个选项卡,它工作正常,然后在响应网络调用的某个时间后添加了其他六个选项卡。问题是当响应网络调用添加六个选项卡时,整个选项卡布局会自动滚动直到结束。
需要注意的几点:
这只发生在 RTL 布局中,在 LTR 布局中它工作正常。
如果我在获取网络调用响应中的所有选项卡后为 viewPager 设置适配器,那么它工作正常。
这是代码。
tabLayout.setupWithViewPager(mViewPager);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
tabLayout.setSmoothScrollingEnabled(true);
pagerAdapter = new PagerAdapter(getChildFragmentManager(), getContext(), tabs);
viewPager.setAdapter(pagerAdapter);
if(savedInstanceState == null) {
pagerAdapter.add(getTab1());
pagerAdapter.add(getTab2());
setCustomViews(getContext());
loadMoreTabs(); //Network call
}
private void loadMoreTabs(){
//in response of network call
onResponse(){
pagerAdapter.addAll(new ArrayList<Object>(response.body()));
setCustomViews(); //Here whole tab layout scrolls till end
}
我找到了为什么会这样。
实际上问题出在首先设置适配器然后在适配器中添加项目。
当适配器已经设置并且我们尝试在适配器中添加一些项目并调用 notifyDataSetChanged() 然后它会滚动到结束 [尽管不知道原因]。
解决方案是再次设置适配器,而不是在适配器中添加项目。我知道这不是一个好方法,但它确实有效。
private void loadMoreTabs(){
onResponse(){
tabs.addAll(new ArrayList<Object>(response.body()));
viewPager.setAdapter(pagerAdapter);
setCustomViews();
}
我的应用程序中有一个选项卡布局。我正在动态添加选项卡。最初添加了两个选项卡,它工作正常,然后在响应网络调用的某个时间后添加了其他六个选项卡。问题是当响应网络调用添加六个选项卡时,整个选项卡布局会自动滚动直到结束。
需要注意的几点:
这只发生在 RTL 布局中,在 LTR 布局中它工作正常。
如果我在获取网络调用响应中的所有选项卡后为 viewPager 设置适配器,那么它工作正常。
这是代码。
tabLayout.setupWithViewPager(mViewPager);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
tabLayout.setSmoothScrollingEnabled(true);
pagerAdapter = new PagerAdapter(getChildFragmentManager(), getContext(), tabs);
viewPager.setAdapter(pagerAdapter);
if(savedInstanceState == null) {
pagerAdapter.add(getTab1());
pagerAdapter.add(getTab2());
setCustomViews(getContext());
loadMoreTabs(); //Network call
}
private void loadMoreTabs(){
//in response of network call
onResponse(){
pagerAdapter.addAll(new ArrayList<Object>(response.body()));
setCustomViews(); //Here whole tab layout scrolls till end
}
我找到了为什么会这样。 实际上问题出在首先设置适配器然后在适配器中添加项目。 当适配器已经设置并且我们尝试在适配器中添加一些项目并调用 notifyDataSetChanged() 然后它会滚动到结束 [尽管不知道原因]。 解决方案是再次设置适配器,而不是在适配器中添加项目。我知道这不是一个好方法,但它确实有效。
private void loadMoreTabs(){
onResponse(){
tabs.addAll(new ArrayList<Object>(response.body()));
viewPager.setAdapter(pagerAdapter);
setCustomViews();
}