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類。 –