我正在创建一个应使用YouTube API在片段内显示youtube视频的应用程序。我需要使用YouTubePlayerSupportFragment,因为我无法将类扩展到YouTubeBaseActivity(因为我已经扩展到AppCompatActivity)。
在这里看到错误
AndroidRuntime: java.lang.IllegalArgumentException: No view found for id 0x7f0f00a5 (com.[].[]:id/youtube_player) for fragment YouTubePlayerSupportFragment{d4c0c78 #4 id=0x7f0f00a5}
我需要显示片段的地方
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView;
import com.google.android.youtube.player.YouTubePlayerSupportFragment;
import com.google.android.youtube.player.YouTubePlayerView;
public class CharityPopup extends DialogFragment {
private YouTubePlayerView youTubeView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().getWindow().setDimAmount(0.0f);
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
getDialog().setCanceledOnTouchOutside(true);
View v = inflater.inflate(R.layout.charity_popup, container, false);
Fragment fragment = YouTubePlayerSupportFragment.newInstance();
getFragmentManager().beginTransaction().replace(R.id.youtube_player,fragment).commit();
return v;
}
@Override
public void onResume() {
super.onResume();
Window window = getDialog().getWindow();
window.setLayout(1000, 1000);
window.setGravity(Gravity.CENTER);
}
}
对应的xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/charity_popup">
<fragment android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
android:id="@+id/youtube_player"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
我的YouTube类(class)
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerSupportFragment;
import com.google.android.youtube.player.YouTubePlayerView;
public class YouTubeVideoFragment extends YouTubePlayerSupportFragment implements YouTubePlayer.OnInitializedListener {
private static final int RECOVERY_REQUEST = 1;
private YouTubePlayerView youTubeView;
public static YouTubeVideoFragment newInstance() {
YouTubeVideoFragment fragment = new YouTubeVideoFragment();
return fragment;
}
private void init(){
initialize("AIzaSyCq543mRV_C5bxdcMxxkXN8U-_bacu8I-Y", this);
}
public YouTubeVideoFragment () {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onDetach() {
super.onDetach();
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
if (!b) {
youTubePlayer.cueVideo("fhWaJi1Hsfo"); // Plays https://www.youtube.com/watch?v=fhWaJi1Hsfo
}
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
if (youTubeInitializationResult.isUserRecoverableError()) {
youTubeInitializationResult.getErrorDialog(getActivity(), RECOVERY_REQUEST).show();
} else {
String error = String.format(getString(R.string.player_error), youTubeInitializationResult.toString());
Toast.makeText(getContext(), error, Toast.LENGTH_LONG).show();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RECOVERY_REQUEST) {
// Retry initialization if user performed a recovery action
getYouTubePlayerProvider().initialize(Config.YOUTUBE_API_KEY, this);
}
}
protected YouTubePlayer.Provider getYouTubePlayerProvider() {
return youTubeView;
}
}
和我的YouTube XML
<?xml version="1.0" encoding="utf-8"?>
<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=".YouTubeVideoFragment">
<com.google.android.youtube.player.YouTubePlayerView
android:id="@+id/youtube_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
最佳答案
最后,解决我的问题的方法是: 1 更好地理解嵌套片段(youtube.com/watch?v=V4kcdvzF5cY),也非常重要和2. 答案如何与YouTubePlayerSupportFragment一起使用。这是保存我的链接:Struggling with Youtube Player Support Fragment。从CzarMatt寻找答案,从Silmarilos寻找更正。对于我的要用youtube片段替换的片段的xml代码:使用了FrameLayout和android:name =“com.google.android.youtube.player.YouTubePlayerSupportFragment”。请注意,我在此处放置了... SupportFragment,这是因为我使用了YouTubePlayerSupportFragment。如果您使用YouTubePlayerFragment,则必须在FrameLayout中放置:android:name =“com.google.android.youtube.player.YouTubePlayerFragment”。
关于android - 我没有找到ID的 View … fragment YouTubePlayerSupportFragment,它关闭了我的应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45535340/