Подтвердить что ты не робот

Как обновить просмотр Youtube Player onItemClickListener() в ListView

Я могу воспроизводить видео Youtube с помощью cuePlaylist(), но я также хочу разрешить пользователю использовать любой элемент списка, а затем я хочу обновить YoutubePlayerView с помощью только что прослушанного видео пользователя

Я использую cuePlaylist(), получая предыдущие и следующие кнопки в качестве функции по умолчанию для проигрывателя Youtube

Итак, я могу обновить YoutubePlayerView тем, который я выбрал в ListView?

Вот мой полный код, но все же, когда я нажимаю на любой элемент списка, не получая никаких изменений в YoutubePlayerView, но могу Log видео Id, который я только что нажал в ListView...

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            strVideoID = flowerList.get(i).getUrl();
            Log.d("url:", strVideoID); // getting particular video id

            youTubePlayerFragment.initialize(API_KEY, new YouTubePlayer.OnInitializedListener() {

                // YouTubeプレーヤーの初期化成功
                @Override
                public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
                    if (!wasRestored) {
                        player.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
                        player.loadVideo(strVideoID);
                        player.play();
                    }
                }

                // YouTubeプレーヤーの初期化失敗
                @Override
                public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult error) {
                    // YouTube error
                    String errorMessage = error.toString();
                    Toast.makeText(MainActivity.this, errorMessage, Toast.LENGTH_LONG).show();
                    Log.d("errorMessage:", errorMessage);
                }
            });

        }
    });

    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {

        if (!b) {
            youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
            youTubePlayer.cuePlaylist(PLAYLIST_ID);
        }

    }
4b9b3361

Ответ 1

Здесь вы используете неправильный подход, вам не нужно каждый раз вызывать инициализацию на YoutubePlayerFragment, первой инициализации достаточно, которую вы сделали в методе onCreate

YouTubePlayerFragment youTubePlayerFragment = YouTubePlayerFragment.newInstance();
    youTubePlayerFragment.initialize(API_KEY, this);

В прослушивателе инициализации, который вы реализовали в Activity, вы должны сохранить ссылку YoutubePlayer в атрибуте уровня класса, подобном этому

 //your class level attribute to keep reference of player
   YouTubePlayer mYoutubePlayer;

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {

    if (!b) {
        youTubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
        youTubePlayer.cuePlaylist(PLAYLIST_ID);
        //Save reference of initialized player in class level attribute
         mYoutubePlayer = youTubePlayer;
    }

}

И используйте этот атрибут игрока для загрузки видео внутри onItemClick вместо того, чтобы снова вызвать инициализацию на YoutubePlayerFragment с новым прослушивателем

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        strVideoID = flowerList.get(i).getUrl();
        Log.d("url:", strVideoID); // getting particular video id
        if(mYoutubePlayer!=null){
        mYoutubePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
        mYoutubePlayer.loadVideo(strVideoID);
        mYoutubePlayer.play();
        }

    }
});

Ответ 2

шаг для воспроизведения любого видеоролика с вашей трубкой

1 создайте представление трубки в файле xml.

<com.google.android.youtube.player.YouTubePlayerView
                android:id="@+id/youtube_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="30dp" />
  1. внутри java файла

    public class MainActivity extends YouTubeBaseActivity implements
                YouTubePlayer.OnInitializedListener {
    
            private static final int RECOVERY_DIALOG_REQUEST = 1;
    
            // YouTube player view
            private YouTubePlayerView youTubeView;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                requestWindowFeature(Window.FEATURE_NO_TITLE);
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
                setContentView(R.layout.activity_main);
    
                youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view);
    
                // Initializing video player with developer key
                youTubeView.initialize(Config.DEVELOPER_KEY, this);
    
            }
    
            @Override
            public void onInitializationFailure(YouTubePlayer.Provider provider,
                    YouTubeInitializationResult errorReason) {
                if (errorReason.isUserRecoverableError()) {
                    errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show();
                } else {
                    String errorMessage = String.format(
                            getString(R.string.error_player), errorReason.toString());
                    Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
                }
            }
    
            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider provider,
                    YouTubePlayer player, boolean wasRestored) {
                if (!wasRestored) {
    
                    // loadVideo() will auto play video
                    // Use cueVideo() method, if you don't want to play it automatically
                    player.loadVideo(YOUTUBE_VIDEO_CODE);
    
                    // Hiding player controls
                    player.setPlayerStyle(PlayerStyle.CHROMELESS);
                }
            }
    
            @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                if (requestCode == RECOVERY_DIALOG_REQUEST) {
                    // Retry initialization if user performed a recovery action
                    getYouTubePlayerProvider().initialize(DEVELOPER_KEY, this);
                }
            }
    
            private YouTubePlayer.Provider getYouTubePlayerProvider() {
                return (YouTubePlayerView) findViewById(R.id.youtube_view);
            }
    
        }