wen*_*319 2 android android-fragments android-tablayout
以下是我目前得到的结果。
预期结果应该是其中三个作为第三个选项卡。
这就是我设置标签布局的方式。
可重用的方法,用于添加片段以查看分页器/选项卡的布局。
public void addFragmentToViewPager(Fragment fragment, String title, int imageRes) {
FragmentViewPagerAdapter fragmentViewPagerAdapter =
(FragmentViewPagerAdapter) mViewPager.getAdapter();
int position = fragmentViewPagerAdapter.addFragment(fragment, title);
fragmentViewPagerAdapter.notifyDataSetChanged();
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我如何添加片段:
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);
Run Code Online (Sandbox Code Playgroud)
还有我的FragmentViewPagerAdapter:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
addFragmentToViewPager中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
Run Code Online (Sandbox Code Playgroud)
更新:
我发现
fragmentViewPagerAdapter.notifyDataSetChanged();
调用后,标签页布局将更改回默认视图。有什么方法可以防止notifyDataSetChanged()不影响选项卡布局的自定义视图?因为我的标签布局标签是随时随地设置的(应用程序将从服务器获取标签内容并进行设置),所以我的想法是先设置viewpager:
FragmentViewPagerAdapter fragmentViewPagerAdapter =
new FragmentViewPagerAdapter(getActivity().getSupportFragmentManager());
mViewPager.setAdapter(fragmentViewPagerAdapter);
mTabLayout.setupWithViewPager(mViewPager);
Run Code Online (Sandbox Code Playgroud)
然后使用添加片段:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
解决方案非常简单。
我们应该了解PagerAdapter.notifyDataSetChange()的工作方式。通过调用它,标签将被重新加载。我发布的方法是从外部更改布局。这意味着自定义布局将恢复为默认设置。
因此,解决方案是先添加片段fragmentViewPager,再调用notifyDataSetChanged,然后自定义布局。
您只应在致电后自定义布局notifyDataSetChanged。
| 归档时间: |
|
| 查看次数: |
1090 次 |
| 最近记录: |