Я пытаюсь ознакомиться с YoutubePlayerView и Mvvmcross моделью с использованием инструмента Xamarin (для Android, iOS)
Я хочу создать видеолист,когда пользователи нажимают на видео, оно может быть воспроизведено в ListView
, но я получаю сообщение об ошибке с 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 !!!!