YouTubePlayerFragment无法转换为android.support.v4.app.Fragment

前端之家收集整理的这篇文章主要介绍了YouTubePlayerFragment无法转换为android.support.v4.app.Fragment前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经坚持了3天了,经过大量搜索后尝试了我遇到的一切,这篇文章真的是最后的手段,我试图用导航抽屉打开一个YouTubePlayerFragment

YouTubePlayerFragment无法转换为android.support.v4.app.Fragment是问题所在

编辑问题:我已经更新了代码,因为我使用了YouTubePlayerSupportFragment而不是YouTubePlayerFragment,我在主要活动中的displayView方法中遇到错误(案例4:fragment = new Youtube(); break;)说无法从Youtube转换为片段,我无法得到一个logcat,因为我甚至无法运行它

编辑问题2:代码再次更新,但现在我有运行时问题,继承logcat

  1. 07-22 22:15:09.782: E/AndroidRuntime(20603): FATAL EXCEPTION: main
  2. 07-22 22:15:09.782: E/AndroidRuntime(20603): Process: net.frankandwalters,PID: 20603
  3. 07-22 22:15:09.782: E/AndroidRuntime(20603): java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.youtube.player.YouTubePlayerView.a()' on a null object reference
  4. 07-22 22:15:09.782: E/AndroidRuntime(20603): at com.google.android.youtube.player.YouTubePlayerSupportFragment.onStart(Unknown Source)
  5. 07-22 22:15:09.782: E/AndroidRuntime(20603): at android.support.v4.app.Fragment.performStart(Fragment.java:1502)
  6. 07-22 22:15:09.782: E/AndroidRuntime(20603): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:957)
  7. 07-22 22:15:09.782: E/AndroidRuntime(20603): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
  8. 07-22 22:15:09.782: E/AndroidRuntime(20603): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
  9. 07-22 22:15:09.782: E/AndroidRuntime(20603): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
  10. 07-22 22:15:09.782: E/AndroidRuntime(20603): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
  11. 07-22 22:15:09.782: E/AndroidRuntime(20603): at android.os.Handler.handleCallback(Handler.java:739)
  12. 07-22 22:15:09.782: E/AndroidRuntime(20603): at android.os.Handler.dispatchMessage(Handler.java:95)
  13. 07-22 22:15:09.782: E/AndroidRuntime(20603): at android.os.Looper.loop(Looper.java:135)
  14. 07-22 22:15:09.782: E/AndroidRuntime(20603): at android.app.ActivityThread.main(ActivityThread.java:5351)
  15. 07-22 22:15:09.782: E/AndroidRuntime(20603): at java.lang.reflect.Method.invoke(Native Method)
  16. 07-22 22:15:09.782: E/AndroidRuntime(20603): at java.lang.reflect.Method.invoke(Method.java:372)
  17. 07-22 22:15:09.782: E/AndroidRuntime(20603): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
  18. 07-22 22:15:09.782: E/AndroidRuntime(20603): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

继承了java代码,希望有人能帮忙,谢谢

  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.view.LayoutInflater;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import android.widget.Toast;
  7.  
  8. import com.google.android.youtube.player.YouTubeInitializationResult;
  9. import com.google.android.youtube.player.YouTubePlayer;
  10. import com.google.android.youtube.player.YouTubePlayerSupportFragment;
  11.  
  12. public class Youtube extends YouTubePlayerSupportFragment implements YouTubePlayer.OnInitializedListener {
  13.  
  14. public static Youtube newInstance() {
  15. Youtube fragment = new Youtube();
  16. return fragment;
  17. }
  18.  
  19. private void init(){
  20. initialize("AIzaSyBybXMSBPvhMKgM4RKqpneb4Tf4yObVAkY",this);
  21. }
  22.  
  23. public Youtube() {
  24. }
  25.  
  26. @Override
  27. public void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. }
  30.  
  31.  
  32. public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
  33. View view = inflater.inflate(R.layout.youtubefragment,container,false);
  34.  
  35. Youtube ytf = newInstance();
  36. ytf.init();
  37. getActivity().getSupportFragmentManager().beginTransaction()
  38. .add(R.id.youtube_player,ytf)
  39. .commit();
  40.  
  41.  
  42. return view;
  43. }
  44.  
  45. @Override
  46. public void onAttach(Activity activity) {
  47. super.onAttach(activity);
  48. }
  49.  
  50. @Override
  51. public void onDetach() {
  52. super.onDetach();
  53. }
  54.  
  55. @Override
  56. public void onInitializationSuccess(YouTubePlayer.Provider provider,YouTubePlayer player,boolean wasRestored) {
  57. if (!wasRestored) {
  58. player.cueVideo("nCgQDjiotG0");
  59. }
  60. }
  61.  
  62. @Override
  63. public void onInitializationFailure(YouTubePlayer.Provider provider,YouTubeInitializationResult youTubeInitializationResult) {
  64. Toast.makeText(getActivity(),"Failured to Initialize!",Toast.LENGTH_LONG).show();
  65. }
  66.  
  67.  
  68. }

这是xml代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:background="@drawable/background"
  7. android:id="@+id/fragment_youtube_player_holder" >
  8.  
  9.  
  10.  
  11. <fragment
  12. android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
  13. android:id="@+id/youtube_player"
  14. android:layout_width="match_parent"
  15. android:layout_height="match_parent"/>
  16.  
  17.  
  18.  
  19.  
  20. </LinearLayout>

这是包含导航抽屉的主要活动

  1. import java.util.ArrayList;
  2.  
  3. import net.frankandwalters.adapter.NavDrawerListAdapter;
  4. import net.frankandwalters.model.NavDrawerItem;
  5. import android.support.v4.app.Fragment;
  6. import android.content.res.Configuration;
  7. import android.content.res.TypedArray;
  8. import android.os.Bundle;
  9. import android.support.v4.app.ActionBarDrawerToggle;
  10. import android.support.v4.app.FragmentActivity;
  11. import android.support.v4.widget.DrawerLayout;
  12. import android.util.Log;
  13. import android.view.Menu;
  14. import android.view.MenuItem;
  15. import android.view.View;
  16. import android.widget.AdapterView;
  17. import android.widget.ListView;
  18.  
  19. public class MainActivity extends FragmentActivity {
  20.  
  21. private DrawerLayout mDrawerLayout;
  22. private ListView mDrawerList;
  23. private ActionBarDrawerToggle mDrawerToggle;
  24.  
  25.  
  26. // nav drawer title
  27. //private CharSequence mDrawerTitle;
  28.  
  29. // used to store app title
  30. //private CharSequence mTitle;
  31.  
  32. // slide menu items
  33. private String[] navMenuTitles;
  34. private TypedArray navMenuIcons;
  35.  
  36. private ArrayList<NavDrawerItem> navDrawerItems;
  37. private NavDrawerListAdapter adapter;
  38.  
  39. @Override
  40. protected void onCreate(Bundle savedInstanceState) {
  41. super.onCreate(savedInstanceState);
  42. setContentView(R.layout.activity_main);
  43.  
  44.  
  45.  
  46. //mTitle = mDrawerTitle = getTitle();
  47.  
  48. // load slide menu items
  49. navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
  50.  
  51. // nav drawer icons from resources
  52. navMenuIcons = getResources()
  53. .obtainTypedArray(R.array.nav_drawer_icons);
  54.  
  55. mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
  56. mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
  57.  
  58. navDrawerItems = new ArrayList<NavDrawerItem>();
  59.  
  60. // adding nav drawer items to array
  61. // Home
  62. navDrawerItems.add(new NavDrawerItem(navMenuTitles[0],navMenuIcons.getResourceId(0,-1)));
  63. // Find People
  64. navDrawerItems.add(new NavDrawerItem(navMenuTitles[1],navMenuIcons.getResourceId(1,-1)));
  65. // Photos
  66. navDrawerItems.add(new NavDrawerItem(navMenuTitles[2],navMenuIcons.getResourceId(2,-1)));
  67. // Communities,Will add a counter here
  68. navDrawerItems.add(new NavDrawerItem(navMenuTitles[3],navMenuIcons.getResourceId(3,-1)));
  69. // Pages
  70. navDrawerItems.add(new NavDrawerItem(navMenuTitles[4],navMenuIcons.getResourceId(4,-1)));
  71. // What's hot,We will add a counter here
  72. navDrawerItems.add(new NavDrawerItem(navMenuTitles[5],navMenuIcons.getResourceId(5,-1)));
  73. navDrawerItems.add(new NavDrawerItem(navMenuTitles[6],navMenuIcons.getResourceId(6,-1)));
  74. navDrawerItems.add(new NavDrawerItem(navMenuTitles[7],navMenuIcons.getResourceId(7,-1)));
  75. navDrawerItems.add(new NavDrawerItem(navMenuTitles[8],navMenuIcons.getResourceId(8,-1)));
  76. navDrawerItems.add(new NavDrawerItem(navMenuTitles[9],navMenuIcons.getResourceId(9,-1)));
  77. navDrawerItems.add(new NavDrawerItem(navMenuTitles[10] + " Disc 3",navMenuIcons.getResourceId(10,-1)));
  78.  
  79.  
  80. // Recycle the typed array
  81. navMenuIcons.recycle();
  82.  
  83. mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
  84.  
  85. // setting the nav drawer list adapter
  86. adapter = new NavDrawerListAdapter(getApplicationContext(),navDrawerItems);
  87. mDrawerList.setAdapter(adapter);
  88.  
  89. // enabling action bar app icon and behaving it as toggle button
  90. getActionBar().setDisplayHomeAsUpEnabled(true);
  91. getActionBar().setHomeButtonEnabled(true);
  92.  
  93. mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout,R.drawable.ic_drawer,//nav menu toggle icon
  94. R.string.app_name,// nav drawer open - description for accessibility
  95. R.string.app_name // nav drawer close - description for accessibility
  96. ) {
  97. public void onDrawerClosed(View view) {
  98. //getActionBar().setTitle(mTitle);
  99. // calling onPrepareOptionsMenu() to show action bar icons
  100. invalidateOptionsMenu();
  101. }
  102.  
  103. public void onDrawerOpened(View drawerView) {
  104. //getActionBar().setTitle(mDrawerTitle);
  105. // calling onPrepareOptionsMenu() to hide action bar icons
  106. invalidateOptionsMenu();
  107. }
  108. };
  109. mDrawerLayout.setDrawerListener(mDrawerToggle);
  110.  
  111. if (savedInstanceState == null) {
  112. // on first time display view for first nav item
  113. displayView(0);
  114. }
  115. }
  116.  
  117. /**
  118. * Slide menu item click listener
  119. * */
  120. private class SlideMenuClickListener implements
  121. ListView.OnItemClickListener {
  122. @Override
  123. public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
  124. // display view for selected nav drawer item
  125. displayView(position);
  126. }
  127. }
  128.  
  129. @Override
  130. public boolean onCreateOptionsMenu(Menu menu) {
  131. getMenuInflater().inflate(R.menu.main,menu);
  132. return true;
  133. }
  134.  
  135. @Override
  136. public boolean onOptionsItemSelected(MenuItem item) {
  137. // toggle nav drawer on selecting action bar app icon/title
  138. if (mDrawerToggle.onOptionsItemSelected(item)) {
  139. return true;
  140. }
  141. // Handle action bar actions click
  142. switch (item.getItemId()) {
  143. case R.id.action_settings:
  144. return true;
  145. default:
  146. return super.onOptionsItemSelected(item);
  147. }
  148. }
  149.  
  150. /* *
  151. * Called when invalidateOptionsMenu() is triggered
  152. */
  153. @Override
  154. public boolean onPrepareOptionsMenu(Menu menu) {
  155. // if nav drawer is opened,hide the action items
  156. boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
  157. menu.findItem(R.id.action_settings).setVisible(drawerOpen && !drawerOpen);
  158. return super.onPrepareOptionsMenu(menu);
  159. }
  160.  
  161. /**
  162. * Diplaying fragment view for selected nav drawer list item
  163. * */
  164. private void displayView(int position) {
  165. // update the main content by replacing fragments
  166. Fragment fragment = null;
  167. switch (position) {
  168. // case 0:
  169. // fragment = new Home();
  170. // break;
  171. // case 1:
  172. // fragment = new Forum();
  173. // break;
  174. // case 2:
  175. // fragment = new Facebook();
  176. // break;
  177. // case 3:
  178. // fragment = new Twitter();
  179. // break;
  180. case 4:
  181.  
  182. //fragment = Youtube.newInstance();
  183.  
  184. // if(YouTubeIntents.isYouTubeInstalled(getBaseContext()) ) {
  185. // if(YouTubeApiServiceUtil.isYouTubeApiServiceAvailable(getBaseContext()) != YouTubeInitializationResult.SUCCESS) {
  186. // // fragment = new Youtube();
  187. // Intent intent = YouTubeIntents.createUserIntent(this,"FrankandWalters");
  188. // startActivity(intent);
  189. //
  190. // } else {
  191. fragment = new Youtube();
  192. //Intent intent = YouTubeIntents.createUserIntent(this,"FrankandWalters");
  193. // startActivity(intent);
  194. // }
  195. // }
  196. break;
  197. // case 5:
  198. // fragment = new Instagram();
  199. // break;
  200. // case 6:
  201. // fragment = new Google();
  202. // break;
  203. // case 7:
  204. // fragment = new Gigography();
  205. // break;
  206. // case 8:
  207. // fragment = new Discography();
  208. // break;
  209. // case 9:
  210. // fragment = new Lyrics();
  211. // break;
  212. // case 10:
  213. // fragment = new Souvenirs();
  214. // break;
  215.  
  216. default:
  217. break;
  218. }
  219.  
  220. if (fragment != null) {
  221. getSupportFragmentManager().beginTransaction()
  222. .replace(R.id.frame_container,fragment).commit();
  223.  
  224. // update selected item and title,then close the drawer
  225. mDrawerList.setItemChecked(position,true);
  226. mDrawerList.setSelection(position);
  227. //setTitle(navMenuTitles[position]);
  228. mDrawerLayout.closeDrawer(mDrawerList);
  229. } else {
  230. // error in creating fragment
  231. Log.e("MainActivity","Error in creating fragment");
  232. }
  233. }
  234.  
  235. // @Override
  236. // public void setTitle(CharSequence title) {
  237. // mTitle = title;
  238. // getActionBar().setTitle("The Frank And Walters");
  239. // }
  240.  
  241. /**
  242. * When using the ActionBarDrawerToggle,you must call it during
  243. * onPostCreate() and onConfigurationChanged()...
  244. */
  245.  
  246. @Override
  247. protected void onPostCreate(Bundle savedInstanceState) {
  248. super.onPostCreate(savedInstanceState);
  249. // Sync the toggle state after onRestoreInstanceState has occurred.
  250. mDrawerToggle.syncState();
  251. }
  252.  
  253. @Override
  254. public void onConfigurationChanged(Configuration newConfig) {
  255. super.onConfigurationChanged(newConfig);
  256. // Pass any configuration change to the drawer toggls
  257. mDrawerToggle.onConfigurationChanged(newConfig);
  258. }
  259.  
  260.  
  261. }

解决方法

将YouTubePlayerFragment替换为 YouTubePlayerSupportFragment,因为这是使用Fragment支持版本的版本.

猜你在找的Android相关文章