下面是我目前正在得到的结果。自定义TabLayout:notifydatasetchanged恢复标签的自定义视图回到默认
预期的结果应该是他们三人的表现为第三个选项卡。
这是我如何设置我的标签布局。
可重复使用的方法添加片段以查看寻呼机/选项卡布局。
我如何添加片段:
getView().addFragmentToViewPager(new ReusableMomentFragment(), "One", R.mipmap.ic_launcher);
getView().addFragmentToViewPager(new ReusableMomentFragment(), "Two", R.mipmap.ic_launcher);
getView().addFragmentToViewPager(new ReusableMomentFragment(), "Three", R.mipmap.ic_launcher);
而且我FragmentViewPagerAdapter:在addFragmentToViewPager
public class FragmentViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public FragmentViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public int addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
return getCount() -1 ;
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
结果为Log.d:
04-27 06:49:39.874 14334-14334/com.zxc.zxczxc D/MomentFragment: One
04-27 06:49:39.877 14334-14334/com.zxc.zxczxc D/MomentFragment: Two
04-27 06:49:39.878 14334-14334/com.zxc.zxczxc D/MomentFragment: Three
更新:
我发现,后
fragmentViewPagerAdapter.notifyDataSetChanged();
调用后,标签布局将被更改回默认视图。有没有办法阻止notifyDataSetChanged()
不影响标签布局的自定义视图?因为我的标签布局选项卡都在旅途中集(应用程序将获取从服务器选项卡的内容,并设置了),所以我的想法是先设置viewpager第一:
FragmentViewPagerAdapter fragmentViewPagerAdapter =
new FragmentViewPagerAdapter(getActivity().getSupportFragmentManager());
mViewPager.setAdapter(fragmentViewPagerAdapter);
mTabLayout.setupWithViewPager(mViewPager);
然后在该片段中使用添加:
public void addFragmentToViewPager(Fragment fragment, String title, int imageRes) {
FragmentViewPagerAdapter fragmentViewPagerAdapter =
(FragmentViewPagerAdapter) mViewPager.getAdapter();
int position = fragmentViewPagerAdapter.addFragment(fragment, title);
View tabItemView = LayoutInflater.from(getContext()).inflate(R.layout.tab_item_child, null);
RoundedImageView roundImageView = (RoundedImageView) tabItemView.findViewById(R.id.childitem_riv);
roundImageView.setImageResource(imageRes);
TextView textView = (TextView) tabItemView.findViewById(R.id.childitem_tv_title);
textView.setText(title);
TabLayout.Tab tab = mTabLayout.getTabAt(position);
if (tab != null) {
Log.d(TAG,tab.getText()+"");
tab.setCustomView(tabItemView);
}
}
在此先感谢
您是否找到解决方案? – Paul
Yeap,我发布了下面的解决方案。 https://stackoverflow.com/a/48739721/7130559 – wenyang9319
请不要犹豫,如果它可以帮助你upvote我的答案。提前致谢。 – wenyang9319