4

我开发了一个使用ActionBarSherlock播放YouTube视频的应用程序。继承ActionBarSherlock和Android YouTubePlayer

既然YouTubePlayer API for Android支援(here),我想这个融入我的应用程序,以提高播放和控制。

我遇到了一个问题,因为我需要对我的活动使用多继承来扩展SherlockActivityYouTubeBaseActivity

我检查了this article,试图了解在Java中多重继承,但坦率地说这是在我的头上。

如果我尝试做类似this的问题,我得到的问题是我无法实例化SherlockActivity

任何人都有一些如何扩展这两个类的具体例子?有没有人需要扩展SherlockActivity和其他一些课程,你是如何完成的?

回答

9

我有同样的问题 - 我想YouTube播放器添加到我的应用程序,但桦林我并不想从它删除夏洛特(基于支持库)。什么是坏的,我没有能够使用任何playbers,因为我有错误(膨胀片段,YouTubePlayerView无法启动没有特殊的活动等)。

工作原理:我使用了SherlockFragmentActivity,FragmentManager(getSupportFragmentManager())和YouTubePlayerSupportFragment。我没有将它添加到XML中,而是从代码创建了一切。我的布局是这样的:

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

和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) { 
       } 

      }); 
} 

} 

我不知道为什么Android的返航错误,当我在不断膨胀的正常方式的意见,但这种完美的作品。

+0

这个和juandg的答案似乎是正确的。这个答案提供了一些具体的例子,所以我标记了达米安最完整的。 – kittka

+2

你有没有正确使用此全屏? –

1

不能同时使用YouTubeBaseActivitySherlockActivity,至少不是在一个实际的方式。

相反,它是一个容易得多,如果你只是用一个SherlockFragmentActivity主办YouTubePlayerFragment

YouTubePlayerFragment包含YouTubePlayerView就像YouTubeBaseActivity,将让你播放YouTube视频。

如果你需要一个如何在Android碎片教程中,你就可以开始here

+3

其实,你需要使用一个YouTubePlayerSupportFragment – Goddchen

+1

这应该是公认的答案。只需使用'Fragment'变种并且节省您所有的麻烦。 – jenzz

1

我复制类com.actionbarsherlock.app.SherlockActivity的源代码,我把它放在我的项目为my.package.SherlockYoutubeActivity,我改为“extends Activity”与“extends YouTubeBaseActivity。” 在我的活动我再从这个类继承这样的:

public class MyVideoActivity extends SherlockYoutubeActivity implements OnInitializedListener 
+0

这是不好的做法吗?要使用最佳答案,但为什么downvote? –

+0

这个工作适合你吗? –

+1

我已经实现了这个解决方案,它完美地工作。 当您更新库Sherlock时,需要记住更新SherlockYoutubeActivity类。 –