如何使用绑定设置 ViewPager 和 TabLayout?(IllegalArgumentException:未找到视图)

How to setup ViewPager and TabLayout with binding?(IllegalArgumentException: No view found)

我尝试使用绑定设置带有 Fragment 的 TabLayout 和 ViewPager。我得到下一个例外:

java.lang.IllegalArgumentException: No view found for 0x7f0e007c (com.movies:id/popular_movies_viewpager) for fragment PopularMoviesTabFragment`

我的 xml 文件如下所示:

activity_main:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.MainActivity"
    >

<data class="MainActivityBinding"></data>

<RelativeLayout

    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/main">

    <android.support.v4.view.ViewPager
        android:id="@+id/popular_movies_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.TabLayout
            android:id="@+id/popular_movies_tablayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top" />

    </android.support.v4.view.ViewPager>

</RelativeLayout>

</layout>

popular_movies_gridview_layout:

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.PopularMoviesTabFragment">

<data></data>
<FrameLayout

    android:layout_width="match_parent"
    android:layout_height="match_parent"
   >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/popular_movies_gridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="600dp"
        android:numColumns="4"
        android:stretchMode="columnWidth"
        android:gravity="left">

    </android.support.v7.widget.RecyclerView>

</FrameLayout>
</layout>

我的主要活动:

public class MainActivity extends AppCompatActivity {

    private MainActivityBinding binding;

    private ViewPager viewPager;
    private TabLayout tabLayout;
    private ViewPagerAdapter viewPagerAdapter;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPagerAdapter.addFragment(PopularMoviesTabFragment.newInstance(), "Trending"); // this line can cause crashes
        viewPager= binding.popularMoviesViewpager;
        binding.popularMoviesViewpager.setAdapter(viewPagerAdapter);
        binding.popularMoviesTablayout.setupWithViewPager(viewPager);
    }
}

我的片段:

public class PopularMoviesTabFragment extends Fragment {

    private List<Movie> movies = new ArrayList<>();
    private PopularMoviesGridviewLayoutBinding binding;
    private PopularMoviesAdapter adapter;
   
  
   public PopularMoviesTabFragment() {
        // Required empty public constructor
    }
    public static PopularMoviesTabFragment newInstance() {
        PopularMoviesTabFragment fragment = new PopularMoviesTabFragment();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = DataBindingUtil.setContentView(getActivity(), R.layout.popular_movies_gridview_layout);
        RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 3);
        binding.popularMoviesGridview.setLayoutManager(layoutManager);
        .
        .
        .
        .
    }

我应该如何更改我的代码才能避免片段异常的无视图?

最终,我发现了问题所在。我调用绑定 onCreate() 而不是 onCreateView()。在我将 PopularMoviesTabFragment 中的所有代码从 onCreate() 更改为 onCreateView() 后,代码按预期工作。