2014-10-20 2 views
19

My Activity расширяет другую активность и состоит из ящика навигации, где каждый элемент открывает новый фрагмент. Я хочу интегрировать Youtube в один из фрагментов. Ранее я использовал YouTubePlayerView для интеграции Youtube в активность, но здесь он требуемый во фрагменте. Я искал в сети и нашел YouTubePlayerFragment для интеграции youtube в фрагмент. Но когда я искал в учебники, я обнаружил, что даже при использовании YouTubePlayerFragment мы расширяем YouTubeBaseActivity .Эти являются примерами .. http://android-coding.blogspot.in/2013/04/example-to-use-youtubeplayerfragment-of.html http://android-er.blogspot.in/2013/06/example-to-use-youtubeplayerfragment-of.htmlИнтеграция youtube в фрагмент

я не в состоянии понять, как использовать YouTubePlayerFragment таким образом, что мой класс расширяет фрагмент, а не YouTubeBaseActivity, которые требуется в моем проекте. Как вы можете видеть ниже, мой класс расширяет еще одно действие и состоит из навигационного ящика, в котором пятый параметр открывает фрагмент YouTube. Я хочу воспроизвести видео Youtube внутри этого фрагмента. Я даю краткое описание того, как мои классы -

public class LandingActivity extends BaseGActivity { 
. 
. 
. 
. 


public void selectDrawerItem(int position) { 

     Bundle args = new Bundle(); 

     switch (position) { 
      case 0: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_ALL); 
       GApplication.getInstance().stopGPlayer(); 
       break; 
      case 1: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_PHOTO); 
       GApplication.getInstance().stopGPlayer(); 
       break; 
// 
      case 2: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_AUDIO); 
       GApplication.getInstance().stopGPlayer(); 
       break; 

      case 3: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_VIDEO); 
       GApplication.getInstance().stopGPlayer(); 
       break; 
      case 4: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_MEME); 
       GApplication.getInstance().stopGPlayer(); 
       break; 
      case 5: 
       currentFragment = new YoutubeFragment(); 
      default: 
       currentFragment = new HomeFragment_(); 
       args.putString(G.General.MEDIA_TYPE_KEY, G.General.MEDIA_TYPE_ALL); 
       GApplication.getInstance().stopGPlayer(); 
       break; 
     } 

     currentFragment.setArguments(args); 
     FragmentManager frgManager = getFragmentManager(); 
     frgManager.beginTransaction().replace(R.id.content_frame, currentFragment) 
       .commit(); 

     mDrawerList.setItemChecked(position, true); 
     setTitle(dataList.get(position).getItemName()); 
     mDrawerLayout.closeDrawers(); 
    } 


    public class YoutubeFragment extends Fragment implements YouTubePlayer.OnInitializedListener{ 
     private FragmentActivity myContext; 

     private YouTubePlayer YPlayer; 
     private static final String YoutubeDeveloperKey = "xyz"; 
     private static final int RECOVERY_DIALOG_REQUEST = 1; 
     @Override 
     public void onAttach(Activity activity) { 

      if (activity instanceof FragmentActivity) { 
       myContext = (FragmentActivity) activity; 
      } 

      super.onAttach(activity); 
     } 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 

      View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false); 

      YouTubePlayerView youTubeView = (YouTubePlayerView) rootView.findViewById(R.id.youtube_view); 
      youTubeView.initialize(YoutubeDeveloperKey, (YouTubePlayer.OnInitializedListener) myContext); 
      return rootView; 
     } 
     @Override 
     public void onInitializationFailure(YouTubePlayer.Provider provider, 
              YouTubeInitializationResult errorReason) { 
      if (errorReason.isUserRecoverableError()) { 
       errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show(); 
      } else { 
       String errorMessage = String.format(
         "There was an error initializing the YouTubePlayer", 
         errorReason.toString()); 
       Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show(); 
      } 
     } 

     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if (requestCode == RECOVERY_DIALOG_REQUEST) 
      { 

       getYouTubePlayerProvider().initialize(YoutubeDeveloperKey, this); 
      } 
     } 



     @Override 
     public void onInitializationSuccess(YouTubePlayer.Provider provider, 
              YouTubePlayer player, boolean wasRestored) { 
      if (!wasRestored) { 
       YPlayer = player; 
       YPlayer.setFullscreen(true); 
       YPlayer.loadVideo("2zNSgSzhBfM"); 
       YPlayer.play(); 
      } 
     } 

    } 

YouTubeFrag ment.java

public class YoutubeFragment extends Fragment implements 
     YouTubePlayer.OnInitializedListener { 
    private FragmentActivity myContext; 

private YouTubePlayer YPlayer; 
private static final String YoutubeDeveloperKey = "xyz"; 
private static final int RECOVERY_DIALOG_REQUEST = 1; 

@Override 
public void onAttach(Activity activity) { 

    if (activity instanceof FragmentActivity) { 
     myContext = (FragmentActivity) activity; 
    } 

    super.onAttach(activity); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false); 

    YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance(); 

    youTubePlayerFragment.initialize("DEVELOPER_KEY", new YouTubePlayer.OnInitializedListener() { 


    }); 
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
    transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit(); 
    return rootView; 

} 
    @Override 
    public void onInitializationSuccess (YouTubePlayer.Provider provider, YouTubePlayer 
    youTubePlayer,boolean b){ 
     if (!b) { 
      YPlayer = youTubePlayer; 
      YPlayer.setFullscreen(true); 
      YPlayer.loadVideo("2zNSgSzhBfM"); 
      YPlayer.play(); 
     } 
    } 

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

    } 
} 

раскладка

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <fragment 
     android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment" 
     android:id="@+id/youtube_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

error-

Error:(64, 101) error: <anonymous com.pc.gi.ui.fragment.YoutubeFragment$1> is not abstract and does not override abstract method onInitializationFailure(Provider,YouTubeInitializationResult) in OnInitializedListener 
+0

Я реализовал видеоплеер в моей юности приложении в последнее время. Моя первая попытка заключалась в использовании YoutubePlayerFragment, но его API немного непрактичен, и он не обеспечил очень «гладкий» пользовательский интерфейс ... поэтому я попробовал Youtube iframe API (https://developers.google.com/youtube/iframe_api_reference) внутри WebView. Android WebView не поддерживает все функции HTML5, поэтому вам нужно сделать некоторые вещи самостоятельно ... но это (https://code.google.com/p/html5webview/) - хорошее место для начала. Конечный результат стоит того. –

+0

Попробуйте следующее: http: //stackoverflow.com/questions/34803095/android-studio-google-map-api-with-fragments –

ответ

54

Первый продлить активность как нормальный

class YourActivity extends Activity... 

в файл макета поместить ниже линии

<fragment 
    android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment" 
    android:id="@+id/youtube_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

Затем в своей деятельности вы можете создать свой экземпляр, используя нижнюю строку в методе onCreareView вашего фрагмента.

YouTubePlayerSupportFragment youTubePlayerFragment = (YouTubePlayerSupportFragment) getActivity().getSupportFragmentManager() 
        .findFragmentById(R.id.youtube_fragment); 

или вы можете объявить FrameLayout в вашем XML, а затем инициировать YouTubeSupportFragment используя ниже линии

<?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" > 

    <FrameLayout 
     android:id="@+id/youtube_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerHorizontal="true" 
     android:visibility="visible" /> 

</RelativeLayout> 

код в вашем onCreateView

YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance(); 

    youTubePlayerFragment.initialize("DEVELOPER_KEY", new OnInitializedListener() { 

     @Override 
     public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { 

      if (!wasRestored) { 
       YPlayer = player; 
       YPlayer.setFullscreen(true); 
       YPlayer.loadVideo("2zNSgSzhBfM"); 
       YPlayer.play(); 
      } 

     } 

     @Override 
     public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
    transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit(); 

Ключевым моментом здесь является использование YouTubePlayerSupportFragment вместо YouTubePlayerFragment.

Надеюсь, это поможет.

Вот ваш фрагмент

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.google.android.youtube.player.YouTubeInitializationResult; 
import com.google.android.youtube.player.YouTubePlayer; 
import com.google.android.youtube.player.YouTubePlayer.OnInitializedListener; 
import com.google.android.youtube.player.YouTubePlayer.Provider; 
import com.google.android.youtube.player.YouTubePlayerSupportFragment; 
import com.ismart.omanapp.R; 

public class YoutubeFragment extends Fragment { 
    private FragmentActivity myContext; 

    private YouTubePlayer YPlayer; 
    private static final String YoutubeDeveloperKey = "xyz"; 
    private static final int RECOVERY_DIALOG_REQUEST = 1; 

    @Override 
    public void onAttach(Activity activity) { 

     if (activity instanceof FragmentActivity) { 
      myContext = (FragmentActivity) activity; 
     } 

     super.onAttach(activity); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.activity_you_tube_api, container, false); 

     YouTubePlayerSupportFragment youTubePlayerFragment = YouTubePlayerSupportFragment.newInstance(); 
     FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
     transaction.add(R.id.youtube_fragment, youTubePlayerFragment).commit(); 

     youTubePlayerFragment.initialize("DEVELOPER_KEY", new OnInitializedListener() { 

      @Override 
      public void onInitializationSuccess(Provider arg0, YouTubePlayer youTubePlayer, boolean b) { 
       if (!b) { 
        YPlayer = youTubePlayer; 
        YPlayer.setFullscreen(true); 
        YPlayer.loadVideo("2zNSgSzhBfM"); 
        YPlayer.play(); 
       } 
      } 

      @Override 
      public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { 
       // TODO Auto-generated method stub 

      } 
     }); 

    } 
} 
+0

Hii..i хочу воспроизвести видео на YouTube внутри фрагмента. Моя деятельность состоит из навигационного ящика на который я хочу, когда я нажимаю на пятый элемент, он открывает фрагмент, в котором воспроизводится видео с YouTube.Если я поместил этот код в действие, он будет воспроизводить видео youtube при нажатии на пятый элемент в навигационном ящике .. или он начнет воспроизводить только видеоролик YouTube внутри себя? Какой код я должен разместить внутри класса, который расширяет фрагмент. ..thanku для ur time .. –

+1

На самом деле вы хотите YoutubeFragment внутри ваших фрагментов. Вам нужно использовать 'getChildFragmentManager()' вместо 'getSupportedFragmentManager();' – Sunny

+0

Вы должны использовать мой второй метод. i.e создайте xml-файл и поместите в него frameLayout и используйте код, который я написал выше, в вашем фрагменте 'onCreateView'. – Sunny

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