首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用单个片段的FragmentStatePageAdapter ViewPager 5 Tabs

使用单个片段的FragmentStatePageAdapter ViewPager 5 Tabs
EN

Stack Overflow用户
提问于 2017-11-24 10:29:31
回答 1查看 414关注 0票数 0

我使用ViewPager表布局来显示5个选项卡,当选择从服务器获取数据以显示这些选项卡时。获取数据的唯一区别是选中的Tab。因此,如果有5个片段来做同样的事情,那将是多余的。因此,我实现了一个片段,如下所示。

活性

代码语言:javascript
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_news_feed);

    mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());
    final ViewPager viewPager  = (ViewPager)findViewById(R.id.pager);
    setupViewPager(viewPager);

    TabLayout tabLayout = (TabLayout)findViewById(R.id.tabLayout);
    tabLayout.setupWithViewPager(viewPager);

    tabLayout.getTabAt(0).setIcon(R.drawable.blogging);
    tabLayout.getTabAt(1).setIcon(R.drawable.tanzania);
    tabLayout.getTabAt(2).setIcon(R.drawable.world);
    tabLayout.getTabAt(3).setIcon(R.drawable.football);
    tabLayout.getTabAt(4).setIcon(R.drawable.coins);
}

private void  setupViewPager(ViewPager viewPager){
    Bundle bundle = new Bundle();
    bundle.putString("edttext", "0");

    NewsFeedTab1 fragObj1 = new NewsFeedTab1();
    fragObj1.setArguments(bundle);

    Bundle bundle2 = new Bundle();
    bundle2.putString("edttext", "8,15");

    NewsFeedTab1 fragObj2 = new NewsFeedTab1();
    fragObj2.setArguments(bundle2);

    Bundle bundle3 = new Bundle();
    bundle3.putString("edttext", "9,10,13");

    NewsFeedTab1 fragObj3 = new NewsFeedTab1();
    fragObj3.setArguments(bundle3);

    Bundle bundle4 = new Bundle();
    bundle4.putString("edttext", "11");

    NewsFeedTab1 fragObj4 = new NewsFeedTab1();
    fragObj4.setArguments(bundle4);

    Bundle bundle5 = new Bundle();
    bundle5.putString("edttext", "12");

    NewsFeedTab1 fragObj5 = new NewsFeedTab1();
    fragObj5.setArguments(bundle5);

    SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
    adapter.addFragment(fragObj1, "Habari");
    adapter.addFragment(fragObj2, "Kitaifa");
    adapter.addFragment(fragObj3, "Kimataifa");
    adapter.addFragment(fragObj4, "Michezo");
    adapter.addFragment(fragObj5, "Biashara");

    viewPager.setAdapter(adapter);
}

问题是,当Pagedapter启动时,它会初始化选项卡位置0和1 (从研究来看这是正常的),这意味着为表1中的选项卡2带来数据。我尝试过实现setUserVisibleHint,但我看不出有什么不同。当每个选项卡有多个片段时,我想setUserVisibleHint是一个合适的解决方案。

片段

代码语言:javascript
复制
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (getView() != null) {
        isViewShown = true;
        // fetchdata() contains logic to show data when page is selected mostly asynctask to fill the data

    } else {
        isViewShown = false;
    }
}        
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view= inflater.inflate(R.layout.fragment_news_feed_tab1, container, false);
    fragView = view;    
     currTab = getArguments().getString("edttext"); 
    if (!isViewShown) {
        loadNewsFeed(isBottom = "0", isTop = "0", lastStart = "0", lastStop = "0");
    }
}

如何消除由于双调用启动片段而导致的单击Tab上的混淆问题。

EN

回答 1

Stack Overflow用户

发布于 2017-11-30 13:44:04

对于那些可能有类似问题的人。我在https://stackoverflow.com/a/20412875/2448688找到了一个解决方案。基本方法不是在OnCreateView中调用volley,而是在接口中实现的方法fragmentBecameVisible中调用,通知片段是否可见,此时只调用Volley。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47471272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档