在片段内部看不到Viewpager

问题描述 投票:0回答:3

我在主要活动中有一个BottomNavigation栏。其中有5项。

这是底部导航的getitem方法

 @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                return new ChatRoomPage();
            case 1:
                return new TopicPage();
            case 2:
                return new TopicPage();
            case 3:
                return new Leaderboard();
            case 4:
                return new Stats();
        }
        return new ChatRoomPage();
    }

我添加了TopicPage()进行测试。

所以主题页面是一个带有标签布局的片段。该片段使用选项卡视图显示其他三个片段。

TopicPage()在案例2中工作正常。

但在案件3片段TopicPage()显示。它还在标签布局中调用三个片段(在日志中获取消息)。但在ViewPager中不可见。并且tablayout上的下划线不会从一个选项卡滑动到另一个带有动画的选项卡。我必须手动滑动它。

和,

当我添加像Stats()Leaderboard()这样的单个片段时,它可以工作。

截图ss

主题页面onCreateview

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    v = inflater.inflate(R.layout.topic_page, container, false);
    tabLayout = v.findViewById(R.id.tab);
    pager = v.findViewById(R.id.pager);
    pager.setOffscreenPageLimit(4);
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    pager.setAdapter(new TopicPagerAdapter(getFragmentManager()));
    tabLayout.setupWithViewPager(pager);
    return v;
}

所以我不知道为什么我会遇到这个问题......

需要帮忙 :(

java android android-fragments
3个回答
2
投票

你介意试试吗?在另一个片段中显示片段时,使用getChildFragmentManager()而不是getSupportFragmentManager()以这种方式初始化pageAdapter:

 pageAdapter = new FragmentHomeAdapter(getChildFragmentManager(), pageList); 

1
投票

覆盖一个名为TopicPage()setUserVisibilityHint()片段中的方法,并在return语句之后的那个方法中...写if(getActivity()!=null) { viewPager.setAdapter(....youradapter); }我认为它会起作用。首先初始化viewPager的适配器然后设置适配器.....让我知道它是否有效..


1
投票

主要信息

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
    tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
    tabLayout.addTab(tabLayout.newTab().setText("Tab 3"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    final PagerAdapter adapter = new PagerAdapter
            (getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(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) {

        }
    });
}

PagerAdapter For Fragment

public class PagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;

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

@Override
public Fragment getItem(int position) {

    switch (position) {
        case 0:
            TabFragment1 tab1 = new TabFragment1();
            return tab1;
        case 1:
            TabFragment2 tab2 = new TabFragment2();
            return tab2;
        case 2:
            TabFragment3 tab3 = new TabFragment3();
            return tab3;
        default:
            return null;
    }
}

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

FirstFragment

public class TabFragment1 extends Fragment {
 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) {
    return inflater.inflate(R.layout.tab_fragment_1, container, false);
}

}

© www.soinside.com 2019 - 2024. All rights reserved.