繁体   English   中英

ViewPager2 不显示片段

[英]ViewPager2 doesn't show Fragments

我正在尝试在我的应用程序中实现 ViewPager2,这不是我第一次这样做,但现在它无法正常工作。

几个小时以来,我一直在尝试寻找解决方案并尝试不同的选择,但仍然 - 片段没有出现。 ViewPager2 显示正确 - 我通过更改其背景颜色进行了检查。

我正在使用OneUI 2.4.0库 - 但我之前测试过这个库并且一切正常,现在它不会了。

ViewPager2 适配器

public class MainViewPagerAdapter extends FragmentStateAdapter {

    private ArrayList<Fragment> arrayList = new ArrayList<>();


    public MainViewPagerAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        switch (position) {
            case 0:
                return new MainFragment();
            case 1:
                return new NewsFragment();
            case 2:
                return new ProfileFragment();

        }
        return null;
    }

    @Override
    public int getItemCount() {
        return 3;
    }
}

MainFragment.java (其他片段代码看起来一样)

public class MainFragment extends Fragment {
    View mRootView;

    @Nullable
    @Override
    public View onCreateView(
            @NonNull LayoutInflater inflater,
            @Nullable ViewGroup container,
            @Nullable Bundle savedInstanceState) {
        mRootView = inflater.inflate(R.layout.fragment_main, container, true);
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Log.d("MainFragment", "Initialized"); // I don't see that in logcat
    }
}

fragment_main.xml (其他片段有类似的布局)

<?xml version="1.0" encoding="utf-8"?>
<de.dlyt.yanndroid.oneui.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.textview.MaterialTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/main_page"
        android:textColor="@color/sesl_primary_text"
        android:textSize="24sp"
        android:textStyle="bold" />
</de.dlyt.yanndroid.oneui.widget.NestedScrollView>

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private ToolbarLayout mToolbarLayout;
    private ViewPager2 mViewPager;
    private TabLayout mTabLayout;

    private MainViewPagerAdapter viewPagerAdapter;

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

        initialize();
        setup();
    }

    private void initialize() {
        mToolbarLayout = (ToolbarLayout) findViewById(R.id.mToolbarLayout);
        mViewPager = (ViewPager2) findViewById(R.id.mMainPager);
        mTabLayout = (TabLayout) findViewById(R.id.mMainTabLayout);
    }

    private void setup() {
        viewPagerAdapter = new MainViewPagerAdapter(getSupportFragmentManager(), getLifecycle());

        mViewPager.setAdapter(viewPagerAdapter);
   }

问题只是我在 ViewPager2 中看不到我的片段。

尝试

return mRootView

代替

return super.onCreateView(inflater, container, savedInstanceState);

您出错的地方是您没有将布局添加到根目录。 问题是这样的:

return super.onCreateView(inflater, container, savedInstanceState);

但是,您没有使用您的视图吗? 您正在使用只是空的默认视图。 因此,要解决它,您需要将视图传递给它,而不是传递给它。 所以,像这样返回你的视图:

return mRootView;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM