0

I have a main activity and three fragments. Each fragment extends Fragment`. I need to play a YouTube video in the second tab.How can I do this?

Here is my ProjecDetailsActivity.java

public class ProjectDetailsActivity extends AppCompatActivity {

    String title;
    String description;
    String projectId;
    String uploadedBy;
    Bundle bundle;

    private SectionsPagerAdapter mSectionsPagerAdapter;


    private ViewPager mViewPager;


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

        mSectionsPagerAdapter = new SectionsPagerAdapter
        (getSupportFragmentManager());


        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

        mViewPager.addOnPageChangeListener(new
        TabLayout.TabLayoutOnPageChangeListener
        (tabLayout));
        tabLayout.addOnTabSelectedListener(new 
        TabLayout.ViewPagerOnTabSelectedListener
        (mViewPager));

        Intent i = getIntent();
        title = i.getStringExtra("Title");
        description = i.getStringExtra("Description");
        projectId = i.getStringExtra("ProjectId");
        uploadedBy = i.getStringExtra("UploadedBy");
    }


    public String getArguementTitle(){
        return title;
    }

    public String getArguementDescription(){
        return description;
    }
    public String getArguementProjectId(){
        return projectId;
    }

    public String getArguementUploadedBy(){
        return uploadedBy;
    }

    public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            Fragment tab = null;


            switch (position){
                case 0:
                    tab = new Tab1Description();
                    break;
                case 1:
                    tab = new Tab2Media();
                    break;
                case 2:
                    tab = new Tab3Code();
                    break;
            }
            bundle = new Bundle();
            bundle.putString("Title",title);
            bundle.putString("Description",title);
            bundle.putString("ProjectId",projectId);
            bundle.putString("UploadedBy",uploadedBy);
            if( bundle != null)
            tab.setArguments(bundle);

            return tab;
        }

        @Override
        public int getCount() {
            // Show 3 total pages.
            return 3;
        }
    }
}

Here is the xml file of Tab 2

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<view

    android:id="@+id/youtubePlayer"
    class="com.google.android.youtube.player.YouTubePlayerView"
    layout_alignParentStart="true"
    layout_alignParentTop="true"
    layout_centerHorizontal="true"
    layout_marginStart="0dp"
    layout_marginTop="109dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />


<Button
    android:id="@+id/actionButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
   />
</RelativeLayout>

Here is my Tab2.java

public class Tab2Media extends Fragment {

    YouTubePlayerView youTubePlayer;
    Button actionButton;
    YouTubePlayer.OnInitializedListener onInitializedListener;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tab2_media,
         container, false);

        actionButton = rootView.findViewById(R.id.actionButton);
        youTubePlayer =  rootView.findViewById(R.id.youtubePlayer);

        onInitializedListener = new YouTubePlayer.OnInitializedListener() 
        {
            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider
            provider, 
            YouTubePlayer youTubePlayer, boolean b) {
                    youTubePlayer.loadVideo("fJ9rUzIMcZQ");
            }

            @Override
            public void onInitializationFailure(YouTubePlayer.Provider 
            provider,
            YouTubeInitializationResult youTubeInitializationResult) {

            }
        };

        actionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                youTubePlayer.initialize
         (YoutubeConfig.getYoutubeAPI(),onInitializedListener);
            }
        });

        return rootView;
    }
}

I get an error in Tab2Media.onCreateView at View rootView = inflater.inflate(R.layout.tab2_media, container, false);

Stacktrace:

-14 14:58:16.723 6661-6661/com.bimsina.projectakhada E/AndroidRuntime: FATAL EXCEPTION: main Process: com.bimsina.projectakhada, PID: 6661 android.view.InflateException: Binary XML file line #7: Binary XML file line #7: Error inflating class com.google.android.youtube.player.YouTubePlayerView at android.view.LayoutInflater.inflate(LayoutInflater.java:539) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at com.bimsina.projectakhada.Tab2Media.onCreateView(Tab2Media.java:25) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827) at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383) at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338) at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2215) at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:649) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:145) at android.support.v4.view.ViewPager.populate(ViewPager.java:1238) at android.support.v4.view.ViewPager.populate(ViewPager.java:1086) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1616) at android.view.View.measure(View.java:19176) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6116) at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:739) at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:91) at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1361) at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:809) at android.view.View.measure(View.java:19176) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6116) at android.widget.FrameLayout.onMeasure(FrameLayout.java:223) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:141) at android.view.View.measure(View.java:19176) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6116) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1723) at android.widget.LinearLayout.measureVertical(LinearLayout.java:788) at android.widget.LinearLayout.onMeasure(LinearLayout.java:648) at android.view.View.measure(View.java:19176) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6116) at android.widget.FrameLayout.onMeasure(FrameLayout.java:223) at android.view.View.measure(View.java:19176) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6116) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1723) at android.widget.LinearLayout.measureVertical(LinearLayout.java:788) at android.widget.LinearLayout.onMeasure(LinearLayout.java:648) at android.view.View.measure(View.java:19176) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6116) at android.widget.FrameLayout.onMeasure(FrameLayout.java:223) at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2695) at android.view.View.measure(View.java:19176) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2496) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1455) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1709) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1328) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6730) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:894) at android.view.Choreographer.doCallbac


If I remove both listeners from Tab2.java then the code works just fine. Is there any solution that can fix this?

Max Vollmer
  • 8,412
  • 9
  • 28
  • 43
bimsina
  • 414
  • 5
  • 12

0 Answers0