【问题标题】:view pager load more than one fragment data once查看寻呼机一次加载多个片段数据
【发布时间】:2017-11-16 06:11:57
【问题描述】:

我正在 App 中工作选项卡,但是当 fragment 加载它时,它会加载两个片段的数据。如何纠正当我为tab 计时时它只加载了这个选项卡数据如何做到这一点

这是我的视图寻呼机代码 // 用于选项卡选择事件

private TabLayout.OnTabSelectedListener onTabSelectedListener(final ViewPager viewPager) {

    return 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) {

        }
    };
}

private void setupViewPager(ViewPager viewPager) {
    //int numberOfPages = 0;

    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new Matches_Tab(), "Matches");
    adapter.addFragment(new NewMatches_Tab(), "New matches");
    adapter.addFragment(new Similar_Matchs_Tab(), "Similar Matches");
    adapter.addFragment(new ShortlistTab(), "ShortListed");
    adapter.addFragment(new Viewed_My_Profile(), "View My Profile");
    adapter.addFragment(new ShortListedMeTab(), "ShortListed Me");
    adapter.addFragment(new Photo_Request_Received(), "Photo Request Received");
    //viewPager.setOffscreenPageLimit(numberOfPages);
    viewPager.setAdapter(adapter);
    //viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    //onTabSelectedListener(viewPager);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

// view pager adapter
 class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

【问题讨论】:

    标签: android android-fragments android-viewpager android-tablayout


    【解决方案1】:

    你可以使用setUserVisibleHint:

    @Override
        public void setUserVisibleHint(boolean isVisibleToUser) {
            super.setUserVisibleHint(isVisibleToUser);
            if(isVisibleToUser){
                //You can do inside this method
            }
        }
    }
    

    如果这个片段在屏幕前面,这将返回 true,然后在其中做任何你想做的事情。

    【讨论】:

    • 这个方法怎么用
    【解决方案2】:

    当片段变得可见时,通过重写 setUserVisibleHint 方法加载您的数据,如下所示:

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
           //Load your data here ...
        }
    }
    

    其次,setOffScreenPageLimit(0) 将不起作用,因为默认情况下,OFF SCREEN VALUE 为 1,并且 value

    【讨论】:

    • 如何在fragment中使用这个方法??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多