ứng dụng của bạn sẽ sụp đổ Khi bạn cố gắng để thổi phồng xem với cùng Fragment
mỗi ListView
mục (Như sự trùng lặp trong id mảnh như quiz này)
Có hai giải pháp (một trong số họ từ @ivagarz câu trả lời):
1- bạn có thể chỉ hiển thị một video youtube Sử dụng YouTubePlayerView
trên ListView
của bạn vào Activity
bố trí của bạn Nhưng Activity
Phải của bạn kéo dài YouTubeBaseActivity
Giống như YouTube Android Player API Doc (I Think Giải pháp này sẽ không giúp bạn giải quyết vấn đề của mình)
2- bạn có thể sử dụng YouTubeThumbnailView
để hiển thị hình thu nhỏ của hình ảnh của video cho mỗi mục vào ListView
bằng nút trình phát youtube trên youtube Hình thu nhỏ được sử dụng để hiển thị video.
Giống như Các Hình tiếp theo:
Khi tài nhấp chuột vào nút nghe nhạc youtube, bạn có hai cách:
Đầu tiên tùy chọn sử dụng YouTubePlayerSupportFragment
: bạn có thể thay thế YouTubeThumbnailView
với YouTubePlayerSupportFragment
Nếu bạn chọn Tùy chọn này, bạn phải:
A- thêm YouTubePlayerSupportFragment
lập trình trên Fly (để tránh trùng lặp ở số Fragment
Id).
B- Chỉ hiển thị một video vào ListView
của bạn là answer of this Question.
Ex:
list_item.xml
bố trí cho ListView
mục:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parent_relativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.google.android.youtube.player.YouTubeThumbnailView
android:id="@+id/youtube_thumbnail"
android:layout_width="fill_parent"
android:layout_height="250dp"
android:scaleType="centerCrop"
android:visibility="gone"/>
<RelativeLayout android:id="@+id/relativeLayout_over_youtube_thumbnail"
android:layout_width="fill_parent"
android:layout_height="250dp"
android:background="@color/color_background_transparent"
android:visibility="gone">
<ImageView android:id="@+id/btnYoutube_player"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="center"
android:src="@drawable/youtube_player"/>
</RelativeLayout>
</RelativeLayout>
trong getView
mehtod của ListView
adapter:
public View getView(int position, View convertView, ViewGroup parent) {
convertView = inflator.inflate(R.layout.list_item.xml, parent, false);
final RelativeLayout relativeLayoutOverYouTubeThumbnailView = (RelativeLayout) convertView.findViewById(R.id.relativeLayout_over_youtube_thumbnail);
final YouTubeThumbnailView youTubeThumbnailView = (YouTubeThumbnailView) convertView.findViewById(R.id.youtube_thumbnail);
// get parent relative layout
RelativeLayout parentRelativeLayout = (RelativeLayout) convertView.findViewById(R.id.parent_relativeLayout);
// then create dynamic FrameLayout
FrameLayout.LayoutParams dynamicFrameLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
final FrameLayout dynamicFrameLayout = new FrameLayout(ctx);
dynamicFrameLayout.setId(Different_ID);
dynamicFrameLayout.setLayoutParams(dynamicFrameLayoutParams);
// then add dynamic FrameLayout as children in parent relative layout
parentRelativeLayout.addView(dynamicFrameLayout);
ImageView youtubePlayerButton = (ImageView) convertView.findViewById(R.id.btnYoutube_player);
youtubePlayerButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
View parentView = (View) v.getParent().getParent();
YouTubeThumbnailView youTubeThumbnailView = (YouTubeThumbnailView) parentView.findViewById(R.id.youtube_thumbnail);
RelativeLayout relativeLayoutOverYouTubeThumbnailView = (RelativeLayout) parentView.findViewById(R.id.relativeLayout_over_youtube_thumbnail);
youTubeThumbnailView.setVisibility(View.GONE);
relativeLayoutOverYouTubeThumbnailView.setVisibility(View.GONE);
YouTubeFragment youTubeFragment = new YouTubeFragment();
youTubeFragment.youTubeFragmentInitialize(VideoID, youTubeFragment, parentView);
getSupportFragmentManager()
.beginTransaction()
.replace(dynamicFrameLayout.getId(), youTubeFragment)
.commit();
}
});
final YouTubeThumbnailLoader.OnThumbnailLoadedListener onThumbnailLoadedListener = new YouTubeThumbnailLoader.OnThumbnailLoadedListener(){
@Override
public void onThumbnailError(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader.ErrorReason errorReason) {
}
@Override
public void onThumbnailLoaded(YouTubeThumbnailView youTubeThumbnailView, String s) {
loadingImage.setVisibility(View.GONE);
youTubeThumbnailView.setVisibility(View.VISIBLE);
relativeLayoutOverYouTubeThumbnailView.setVisibility(View.VISIBLE);
}
};
youTubeThumbnailView.initialize(API_KEY, new YouTubeThumbnailView.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader youTubeThumbnailLoader) {
youTubeThumbnailLoader.setVideo(VideoID);
youTubeThumbnailLoader.setOnThumbnailLoadedListener(onThumbnailLoadedListener);
}
@Override
public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) {
}
});
}
tôi đã được tạo ra riêng tôi Fragment
kéo dài từ YouTubePlayerSupportFragment
:
public class YouTubeFragment extends YouTubePlayerSupportFragment {
public void youTubeFragmentInitialize(final String videoId, final YouTubeFragment fragment, final View parent) {
fragment.initialize(apiKey, new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, final YouTubePlayer youTubePlayer, boolean wasRestored) {
youTubePlayer.setShowFullscreenButton(false);
if (!wasRestored) {
youTubePlayer.loadVideo(videoId);
}
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
Log.e("app", youTubeInitializationResult.toString());
}
});
}
}
Second tùy chọn sử dụng YouTubeStandalonePlayer
hoặc tạo riêng của bạn Activity
kéo dài YouTubeBaseActivity
: Chỉ khi người dùng bấm vào nút nghe nhạc youtube, bạn có thể tạo một Intent để mở hoạt động mới để hiển thị video
Intent intent = YouTubeStandalonePlayer.createVideoIntent(context, YOUR_DEVELOPER_KEY, VIDEO_ID);
startActivity(intent);
Bạn có thể chia sẻ đầu ra của lệnh này 'adb shell dumpsys activity'? Nó chứa danh sách các mảnh vỡ hoạt động và được thêm vào. –
bạn có sử dụng các đoạn thư viện hỗ trợ không? – Yuraj
Có. Tôi có các mảnh thư viện hỗ trợ. –