0

Я пытаюсь настроить TabLayout и ViewPager с помощью фрагмента, используя привязку. Я получаю следующее исключение:Как настроить ViewPager и TabLayout со связыванием? (IllegalArgumentException: не найдено)

java.lang.IllegalArgumentException: Нет вид найденный для 0x7f0e007c (com.movies: идентификатор/popular_movies_viewpager) для фрагмента 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> 

Мой MainActivity:

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"); 
     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); 
     . 
     . 
     . 
     . 
    } 

Как я должен изменить свой код, чтобы быть в состоянии избежать без вида на исключение фрагмента?

ответ

0

В конце концов, я выяснил, проблема. Я назвал bindings onCreate() вместо onCreateView(). После того, как я изменил весь код с onCreate() на onCreateView() в PopularMoviesTabFragment, код работал так, как предполагается.

Смежные вопросы