gpt4 book ai didi

android - 自定义 TabLayout : notifydatasetchanged revert custom view of tabs back to the default

转载 作者:太空狗 更新时间:2023-10-29 16:29:07 24 4
gpt4 key购买 nike

下面是我目前得到的结果。

Result

预期的结果应该是其中三个作为第三个选项卡。

这就是我设置选项卡布局的方式。

添加 fragment 以查看分页器/选项卡布局的可重用方法。

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);
}
}

我如何添加 fragment :

    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 :

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);
}
}

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

更新:

我发现,之后

fragmentViewPagerAdapter.notifyDataSetChanged();

调用后,选项卡布局将更改回默认 View 。有什么方法可以防止 notifyDataSetChanged() 不影响选项卡布局的自定义 View 吗?因为我的选项卡布局选项卡是在移动中设置的(应用程序将从服务器获取选项卡内容并进行设置)所以我的想法是首先设置 viewpager :

FragmentViewPagerAdapter fragmentViewPagerAdapter =
new FragmentViewPagerAdapter(getActivity().getSupportFragmentManager());

mViewPager.setAdapter(fragmentViewPagerAdapter);

mTabLayout.setupWithViewPager(mViewPager);

然后使用 :

添加到 fragment 中
    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);
}
}

提前致谢

最佳答案

解决方案非常简单。

我们应该了解如何PagerAdapter.notifyDataSetChange()作品。通过调用它,选项卡将被重新加载。我贴的方法是在外部更改布局。这意味着自定义布局将恢复为默认布局。

所以解决方案是先将 fragment 添加到fragmentViewPager,然后调用notifyDataSetChanged,然后自定义布局。

您应该仅在调用 notifyDataSetChanged 后自定义您的布局。

关于android - 自定义 TabLayout : notifydatasetchanged revert custom view of tabs back to the default,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43655859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com