Ошибка надувания класса com.google.android.youtube.player.YouTubePlayerView в ListView - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь ознакомиться с YoutubePlayerView и Mvvmcross моделью с использованием инструмента Xamarin (для Android, iOS)

Я хочу создать видеолист,когда пользователи нажимают на видео, оно может быть воспроизведено в ListView enter image description here

, но я получаю сообщение об ошибке с Android

строка двоичного файла XML# 1: Ошибка надувания класса com.google.android.youtube.player.YouTubePlayerView

Пока мой код:

Это список: VideoListView.axml:

<android.support.v4.widget.SwipeRefreshLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        local:MvxBind="Refresh RefreshCommand; Refreshing IsRefreshing">

        <dc.CustomMvxListView
            android:id="@+id/videoList"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </android.support.v4.widget.SwipeRefreshLayout>

VideoListItemView.axml:

<dc.AlphaLinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    local:MvxBind="Click ItemClickCommand">

    <!--Video Thumbnail-->
    <FrameLayout
        android:layout_width="@dimen/ProductImageWidth"
        android:layout_height="@dimen/ProductImageHeight"
        android:layout_margin="@dimen/ExtraNewsImagePadding">
        <com.google.android.youtube.player.YouTubePlayerView
        android:id="@+id/playerView"
        android:layout_width="@dimen/ProductImageWidth"
        android:layout_height="@dimen/ProductImageHeight"
        android:layout_margin="@dimen/ExtraNewsImagePadding"/>
    </FrameLayout>

    <!--Video information-->
    <LinearLayout
    ....
    </LinearLayout>

</dc.AlphaLinearLayout>

VideoListView.cs

   public class VideoListView : DetailViewWithShare
    {
        protected override int LayoutId => Resource.Layout.VideoListView;
        private CustomMvxListView _videoListview;

        protected override void InitView(View view)
        {
            _videoListview = view.FindViewById<CustomMvxListView>(Resource.Id.videoList);
            _videoListview.ItemTemplateId = Resource.Layout.VideoListItemView;
        }

        protected override void CreateBinding()
        {
            var bindingSet = this.CreateBindingSet<VideoListView, VideoListViewModel>();

            bindingSet.Bind(_videoListview.Adapter)
                .For(v => v.ItemsSource)
                .To(vm => vm.VideoItemViewModels);

            bindingSet.Bind(_videoListview)
                .For(v => v.ScrollToBottom)
                .To(vm => vm.ScrollToBottomCommand);

            bindingSet.Apply();
        }
}

VideoListItemView.cs

namespace Droid.Views.Video
{
    public class VideoListItemView : YouTubeFailureRecoveryActivity
    {
        private string _youtubeId;
        public string YoutubeId
        {
            get
            {
                return _youtubeId;
            }
            set
            {
                _youtubeId = value;
                _player.CueVideo(value);
            }
        }

        private IYouTubePlayer _player;
        protected override IYouTubePlayerProvider YouTubePlayerProvider => FindViewById<YouTubePlayerView>(Resource.Id.playerView);

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.VideoListItemView);

            var youtubeView = FindViewById<YouTubePlayerView>(Resource.Id.playerView);
            youtubeView.Initialize(DEVELOPER_KEY, this);

        }

        public override void OnInitializationSuccess(IYouTubePlayerProvider provider, IYouTubePlayer player, bool wasRestored)
        {
            if (!wasRestored)
            {
                _player = player;
            }
        }
    }

    public abstract class YouTubeFailureRecoveryActivity : YouTubeBaseActivity, IYouTubePlayerOnInitializedListener
    {
        public const int RecoveryDialogRequest = 1;
        public string DEVELOPER_KEY = "AIzaSyDQjcaioPiOuMCPcugUmUxTijoy3sTLXkM";

        public void OnInitializationFailure(IYouTubePlayerProvider provider, YouTubeInitializationResult errorReason)
        {
            if (errorReason.IsUserRecoverableError)
            {
                errorReason.GetErrorDialog(this, RecoveryDialogRequest).Show();
            }
            else
            {
                var errorMessage = string.Format("Error initializing YouTube player", errorReason.ToString());
                Toast.MakeText(this, errorMessage, ToastLength.Long).Show();
            }
        }

        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            if (requestCode == RecoveryDialogRequest)
            {
                // Retry initialization if user performed a recovery action
                YouTubePlayerProvider.Initialize(DEVELOPER_KEY, this);
            }
        }

        public abstract void OnInitializationSuccess(IYouTubePlayerProvider provider, IYouTubePlayer player, bool wasRestored);

        protected abstract IYouTubePlayerProvider YouTubePlayerProvider { get; }
    }
}

** Невозможно реализовать YouTubeBaseActivity в ViewModel, поскольку его ViewModel используется для iOS и Android.

Все, что мне нужно, это сначала успешно накачать YoutubePlayer для Android, а потом вычислить остальное. **

Выполнено много исследований, но я еще не решил эту ошибку: Двоичный XMLСтрока файла # 1: Ошибка надувания класса com.google.android.youtube.player.YouTubePlayerView

Help !!!!

...