区块链技术博客
www.b2bchain.cn

解决TabLayout +ViewPager+Fragment 错乱的问题的讲解

这篇文章主要介绍了解决TabLayout +ViewPager+Fragment 错乱的问题的讲解,通过具体代码讲解7401并且分析了解决TabLayout +ViewPager+Fragment 错乱的问题的讲解的详细步骤与相关技巧,需要的朋友可以参考下

本文实例讲述了解决TabLayout +ViewPager+Fragment 错乱的问题的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7401.html。具体如下:

最近在用www.wanAndroid.com 开放Api。

用TabLayout +ViewPager +Fragment实现以下效果时,遇到了viewpager中的fragment出现错乱的问题。 

我之前一直认为是创建fragment时传值有问题,但debug来看并不是这个原因。

解决TabLayout +ViewPager+Fragment 错乱的问题

   //这是viewPager 适配器代码

 public class ProjectPagerAdapter extends FragmentPagerAdapter {     private List<Project.DataBean> dataBeans=new ArrayList<>();      public ProjectPagerAdapter(@NonNull FragmentManager fm) {         super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);     }      @Nullable     @Override     public CharSequence getPageTitle(int position) {         return dataBeans.get(position).getName();     }      @NonNull     @Override     public Fragment getItem(int position) {     //在创建fragment时同时把该fragment需要的id传入         return ProjectChildFragment.newInstance(dataBeans.get(position).getId());     }      @Override     public int getCount() {         return dataBeans.size();     }      public void setDataBeans(List<Project.DataBean> dataBeans) {         this.dataBeans.clear();         this.dataBeans.addAll(dataBeans) ;         notifyDataSetChanged();     } }

 下面是fragment中部分代码

 

 public static ProjectChildFragment newInstance(int id){     //构造函数     ProjectChildFragment fragment=new ProjectChildFragment();     Bundle bundle=new Bundle();     bundle.putInt("id",id);     fragment.setArguments(bundle);     return fragment; }
 @Override public void initData(@Nullable Bundle savedInstanceState) {     //初始化数据     if (getArguments()!=null){         id =getArguments().getInt("id");     }     initView();     mPresenter.loadChildData(currentNum,id);  }
 @Override public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,                      @Nullable Bundle savedInstanceState) {     if (rootView!=null){         return rootView;     }     rootView = inflater.inflate(R.layout.fragment_project_child, container, false);     return rootView; }
 private void initView() {     viewPager = getActivity().findViewById(R.id.project_viewPager);     materialLayout = getActivity().findViewById(R.id.material_layout);     materialLayout.setupWithViewPager(viewPager);     projectPagerAdapter = new ProjectPagerAdapter(getChildFragmentManager());     viewPager.setAdapter(projectPagerAdapter);     viewPager.setOffscreenPageLimit(0);   }

//数据获取后回调函数,更新recyclerview中的数据

 @Override public void loadRecycler(ProjectChild projectChild) {     data.addAll(projectChild.getData().getDatas());     adapter.addData(data);     adapter.notifyDataSetChanged(); }

看完以上代码,大概已经发现什么问题了吧。没错问题就是initView里 应该用rootview.findViewById(),而不是getActivity.findViewById().因为当界面中有很多相同的id时,就会找错。这样问题就解决啦。

本文地址https://www.b2bchain.cn/7401.html

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 解决TabLayout +ViewPager+Fragment 错乱的问题的讲解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们