我正在創建一個應用程序,應該顯示在YouTube片段使用YouTube API的YouTube視頻。我需要使用YouTubePlayerSupportFragment,因爲我無法將我的課程擴展到YouTubeBaseActivity(因爲我已經擴展到AppCompatActivity)。 在這裏看到的錯誤我得到沒有發現ID ....的片段YouTubePlayerSupportFragment片段,它關閉我的應用程序
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類
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>
確保您對應的xml文件名是'charity_popup'。如果是,則檢查'charity_popup.xml'是否位於名爲'layout'的文件夾中或其他名爲'layout-large'的文件夾中,等等,也就是說您不會忘記處理多個屏幕大小。 – Abbas
基於此[頁面](https://stackoverflow.com/questions/7508044/),請確保您已正確指定'FragmentActivity'的'onCreate()'方法的'setContentView()'中的佈局, 。這個[error](https://stackoverflow.com/a/18146302/5832311)在嵌套Fragments **並且使用getSupportFragmentManager()而不是getChildFragmentManager()來添加時也會發生。這是另一個[SO帖子](https://stackoverflow.com/questions/28556277/java-lang-illegalargumentexception-no-view-found-for-id-0x7f090047-project-na)以供參考。 – abielita