Viewlay与Tablayout无法正常工作

时间:2016-12-31 04:24:06

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

我在这里得到的结果就像......

  1. 活动开始..

    当时这两个片段调用   - >片段1加载   - >片段2在后台加载

  2. 交换权(意味着从frag 1转到片段2)

    当时我处于片段二和同一时间   - >片段3在背景中加载

  3. 向右交换(意味着从Frag 2转到3)

    - >没有任何问题。

  4. 这是我的代码

    主要活动

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);
    
        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    
    
    }
    
    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new OneFragment(), "ONE");
        adapter.addFragment(new TwoFragment(), "TWO");
        adapter.addFragment(new ThreeFragment(), "THREE");
        viewPager.setAdapter(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();
        }
       // add fragment 
        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }
        // for title
        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
    

    现在还有3个片段,片段中没有任何内容......

3 个答案:

答案 0 :(得分:1)

ViewPager setOffscreenPageLimit默认为1

请查看此链接 Visit Documentation

<强>更新 请覆盖片段

的这种方法
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {

        // load data here
    }else{
        // fragment is no longer visible
    }
}

答案 1 :(得分:0)

使用本教程..这可以帮助您

http://www.androidhive.info/2015/09/android-material-design-working-with-tabs/

您不需要在onCreate方法中删除此行<(删除此行)

 viewPager.setCurrentItem(0);
 viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

默认情况下,Viewpager会将“0”设置为起始索引..

答案 2 :(得分:0)

用此替换您的代码。这在我的应用程序上运行良好:

@Override
protected void onCreate(Bundle savedInstanceState) {

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    assert tabLayout != null;
    tabLayout.setupWithViewPager(viewPager);

    tabLayout.setSelected(true);
}

无需添加 viewPager.setCurrentItem(0);

因为默认情况下,ViewPager将被设置为起始索引0.正如Ajay Jayendran所说。

希望这会奏效。 (: