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?