Heredando ActionBarSherlock y Android YouTubePlayer
He desarrollado una aplicación para reproducir videos de youtube con ActionBarSherlock.
Ahora que la api de YouTubePlayer para android está disponible ( aquí ), quiero integrarla en mi aplicación para mejorar la reproducción y los controles.
- Aplicación de Android de Youtube Watch Me cerrando inesperadamente
- Cómo actualizar Youtube Player View onItemClickListener () en un ListView
- Swipe Gesture no funciona en YouTubePlayerView en modo de pantalla completa
- ¿Es posible reproducir YouTubePlayer a través de STREAM_ALARM
- Youtube API "Se ha producido un error al inicializar el reproductor de YouTube".
Me he topado con un problema, en el que necesito usar herencia múltiple para mi actividad para extender tanto SherlockActivity
como YouTubeBaseActivity
.
He comprobado este artículo para intentar entender la herencia múltiple en Java, pero francamente está sobre mi cabeza.
Si intento hacer algo como esto recibo el problema que no puedo instanciar SherlockActivity
.
¿Alguien tiene algún ejemplo concreto de cómo extender ambas clases? ¿Alguien tuvo que extender tanto SherlockActivity
como alguna otra clase, y cómo lograste?
- Youtube YouTubePlayerSupportFragment no funciona correctamente (¿cargando siempre?)
- API de YouTube para Android: YouTubePlayerFragment loading spinner
- Añadir fragmento en un fragmento (fragmento anidado)
- Android: intentando obtener datos de youtube api
- Reproducción de vídeos de YouTube desde una vista web
- Reproducción de vídeos de YouTube con ExoPlayer
- YouTubePlayerView en un ScrollView
- YouTubePlayerFragment no funciona (Reproduciendo) en CollapsingToolbarLayout
Tuve los mismos problemas – quería añadir reproductor de YouTube a mi aplicación, pero albo no quería eliminar Sherlock de ella (basado en la biblioteca de soporte). Y lo que es malo, yo no era capaz de utilizar cualquiera de los playbers, porque tengo errores (inflando fragmento, YouTubePlayerView no puede comenzar sin actividad especial y así sucesivamente).
Lo que funcionó: Utilicé SherlockFragmentActivity, FragmentManager (getSupportFragmentManager ()) y YouTubePlayerSupportFragment. En lugar de agregarlo a XML, he creado todo desde el código. Mi diseño se ve así:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <LinearLayout android:id="@+id/fragmentz" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" />
Y código Java:
package com.example.youtubetesting; import com.actionbarsherlock.app.SherlockFragmentActivity; 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.YouTubePlayerSupportFragment; import com.google.android.youtube.player.YouTubePlayer.Provider; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; public class MainActivity extends SherlockFragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction(); YouTubePlayerSupportFragment fragment = new YouTubePlayerSupportFragment(); fragmentTransaction.add(R.id.fragmentz, fragment); fragmentTransaction.commit(); fragment.initialize("Your API KEY HERE", new OnInitializedListener() { @Override public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, boolean arg2) { if (!arg2) { arg1.loadVideo("wKJ9KzGQq0w"); } } @Override public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { } }); } }
No sé por qué Android estaba devolviendo errores cuando estaba inflando las vistas de manera normal, pero esto funciona perfectamente.
No puedes usar YouTubeBaseActivity
y SherlockActivity
al mismo tiempo, al menos no de una manera práctica.
En su lugar, es mucho más fácil si sólo utiliza una SherlockFragmentActivity
para alojar un YouTubePlayerFragment
YouTubePlayerFragment
contiene YouTubePlayerView
al igual que YouTubeBaseActivity
que te permitiría reproducir vídeos de YouTube.
Si necesitas un tutorial sobre Fragmentos en Android puedes empezar aquí
Copié el código fuente de la clase com.actionbarsherlock.app.SherlockActivity
y lo puse en mi proyecto como my.package.SherlockYoutubeActivity
, y sustituí " extends Activity
" por " extends YouTubeBaseActivity
". En mi actividad entonces heredé de esta clase como esto:
public class MyVideoActivity extends SherlockYoutubeActivity implements OnInitializedListener
- Configurar nextFocus para EditTexts no funciona
- Android: carga la fuente personalizada en la tarjeta SD