4

ActionBarSherlock を使用して YouTube 動画を再生するアプリを開発しました。

Android 用の YouTubePlayer API が利用可能になったので (こちら)、これをアプリに統合して、再生とコントロールを改善したいと考えています。

アクティビティに複数の継承を使用して、拡張SherlockActivityと拡張の両方を行う必要があるという問題に遭遇しましたYouTubeBaseActivity

Java での多重継承を理解しようとこの記事を調べましたが、率直に言って、頭がいっぱいです。

このようなことをしようとすると、インスタンス化できないという問題が発生しますSherlockActivity

両方のクラスを拡張する方法の具体的な例はありますか? SherlockActivity両方と他のクラスを拡張しなければならなかった人はいますか?どのように達成しましたか?

4

3 に答える 3

9

私は同じ問題を抱えていました.YouTubeプレーヤーをアプリに追加したかったのですが、Sherlockをアプリから削除したくありませんでした(サポートライブラリに基づく)。そして悪いことに、エラーが発生したため、プレーヤーを使用できませんでした (フラグメントの膨張、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 がエラーを返す理由はわかりませんが、これは完全に機能します。

于 2012-12-22T17:00:58.790 に答える
1

少なくとも実用的な方法では、 aと a の両方を同時に使用することはできません。YouTubeBaseActivitySherlockActivity

代わりに、を使用してYouTubePlayerFragmentSherlockFragmentActivityをホストするだけの方がはるかに簡単です

には、 YouTube ビデオを再生できる と同様のがYouTubePlayerFragment含まれています。YouTubePlayerViewYouTubeBaseActivity

Android の Fragments に関するチュートリアルが必要な場合は、ここから開始できます

于 2012-12-22T06:34:16.823 に答える
1

クラスのソース コードをコピーcom.actionbarsherlock.app.SherlockActivityしてプロジェクトに として配置し、「 」を「 」my.package.SherlockYoutubeActivityに置き換えました。私の活動では、このクラスから次のように継承しました:extends Activityextends YouTubeBaseActivity

public class MyVideoActivity extends SherlockYoutubeActivity implements OnInitializedListener
于 2013-07-26T07:33:17.177 に答える