当前位置: 首页 > 知识库问答 >
问题:

使用单个片段的FragmentStatePageAdapter ViewPager 5选项卡

郑卜鹰
2023-03-14

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

活动

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

片断

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

我怎样才能消除问题的点击选项卡混为一谈,我猜是由于双重调用开始片段。

共有1个答案

须鸿祯
2023-03-14

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

 类似资料:
  • 我想更改片段选项卡的大小。有什么办法吗??我们可以更改使用视图寻呼机和片段创建的片段选项卡的大小??

  • 我有一个应用程序,它使用选项卡进行导航。通过这些选项卡,我在布局中使用和。 我已经在应用程序的主中配置了这些内容。在这里,我为添加了一个页面更改监听器,并更改了关于位置的选项卡。当按下选项卡时,我也会以另一种方式进行操作。这都没问题。 然后我就有了标签中的内容。它们都扩展了类。第一个必须根据设备改变布局。在横向平板电脑()上,我有一个包含两个片段的布局,而其他设备只有一个片段。这是由appiate

  • 我已经在我的片段中重写了以下方法:setUserVisibleHint 在fragment类中,变量设置为:private var isLoadOnce=false。 我有3个片段,问题是当我的活动popsup时,第一个片段是可见的,如果我单击最后一个选项卡,也就是第三个选项卡加载第三个片段,什么也不会发生,即web服务根本不会调用。

  • 在我的应用程序中,我有5个片段。我使用底部导航来管理它们。但在第一个片段中,我有回收器视图,当我单击回收器项目时,我需要在此选项卡(第一个选项卡)中打开第二个片段。 现在,当我试图打开第二个片段时,他打开了所有标签上方。 这就是我如何打开第二个碎片

  • 我想将数据从父片段传递到选项卡式片段(子片段),以便传递初始数据(当父片段第一次加载时),我使用了Bundle数据。当在子片段的嵌套片段中时,我调用PopbackStack(),以便通过单击按钮返回。在那里,我需要更新之前传递到子选项卡片段的捆绑数据。捆绑数据不会得到更新的数据集 父片段-初始状态 子片段-Tab片段 孩子- 我错过了什么?请帮忙

  • 但是我不能在ChildFragment1、ChildFragment2、ChildFragment3中添加新的OptionMenu,因为从未调用子片段类的onCreateOptionsMenu(Menu Menu,MenuFlater MenuFlater)方法。