【问题标题】:I want to load fragment when i click on tab of TabLayout or move by viewpager当我单击 TabLayout 的选项卡或通过 viewpager 移动时,我想加载片段
【发布时间】:2018-08-11 12:06:32
【问题描述】:

我有多个片段,所有片段都显示一些新闻

问题是,当我运行我的应用程序时,所有片段都加载并从服务器获取所有片段数据,但我想在移动该特定片段时获取数据,所以请帮助我

我的代码在下面

MainActivity.Java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    setToolbar();
    initView();
}

private void initView() {
    TabLayout tabLayout=(TabLayout)findViewById(R.id.tablayout);
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);

    addTabs(tabLayout,viewPager);

    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}

private void addTabs(TabLayout tabLayout, final ViewPager viewPager) {
    final PageAdapter pageAdapter = new PageAdapter(getSupportFragmentManager(), 5);
    tabLayout.addTab(tabLayout.newTab().setText(NewsConstant.HeadLines));
    tabLayout.addTab(tabLayout.newTab().setText(NewsConstant.Sports));
    tabLayout.addTab(tabLayout.newTab().setText(NewsConstant.Health));
    tabLayout.addTab(tabLayout.newTab().setText(NewsConstant.India));
    tabLayout.addTab(tabLayout.newTab().setText(NewsConstant.World));
    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());

        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

    viewPager.setAdapter(pageAdapter);
    viewPager.setOffscreenPageLimit(5);

}

PageAdapter.java

public class PageAdapter extends FragmentStatePagerAdapter {

int mNumOfTabs;

public PageAdapter(FragmentManager fm, int NumOfTabs) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}

@Override
public Fragment getItem(int position) {
     return NewsFragment.newInstance(position,position+"");
}

@Override
public int getCount() {
    return mNumOfTabs;
}

NewFragment.java

public class NewsFragment extends Fragment {

private RecyclerView recyclerView;

public static NewsFragment newInstance(int index,String title) {
    NewsFragment fragment = new NewsFragment();
    Bundle args = new Bundle();
    args.putInt(NewsConstant.INDEX,index);
    args.putString(NewsConstant.TITLE,title);
    fragment.setArguments(args);

    return fragment;
}



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_news_list, container, false);

    initView(view);
    getDataFromServer(); // Here i get data and display

    return view;
}

例如。

我在Activity中使用TabLayout、ViewPager来加载Fragments

我有 3 个像 标题 |运动 |好莱坞

我对所有 TAB 使用相同的片段 所以当我点击好莱坞标签然后从服务器获取数据并显示在那个 recyclerView

【问题讨论】:

  • 你能再检查一下语法吗?有些句子很混乱。谢谢

标签: android android-fragments android-activity adapter


【解决方案1】:

我曾经遇到过同样的问题 尝试使用

private boolean isViewShown = false;
@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser);      
if (getView() != null && isVisibleToUser) { 
     isViewShown = true; // fetchdata() contains logic to show data when page is selected mostly asynctask to fill the data 
     fetchData(); 
} else { 
     isViewShown = false; 
} }

当你到达内部的片段时,调用你的 Api 或你想看到的任何东西

【讨论】:

  • if (getView() != null && isVisibleToUser) { fetchdata } 谢谢它的工作,只需添加这个条件
【解决方案2】:

View pager 实际上同时加载上一页、当前页和下一页。这是为了在滑动时获得无缝体验。这可以使用@Jius Lukose 提到的方法来控制

或者请参考答案 How can make my ViewPager load only one page at a time ie setOffscreenPageLimit(0);

【讨论】:

  • SetoffscreenPageLimit 将不起作用。我对此做了很多尝试。
  • 请参考链接。它使用了一个 CustomViewPager
猜你喜欢
  • 2021-05-28
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多