2014-07-20 5 views
1

나는 초보자이며 youtube 비디오를 youtube api fragment를 사용하여 표시하려고합니다. 이 문제를 이미 검색했지만 찾으려고했지만 올바른 대답을 찾을 수 없습니다. 그래서 저는 viewpager를 사용하여 youtube 비디오를 보여주고 싶습니다. youtube의 첫 번째 호출기에서, 다른 이미지에서 호출기로. 그래서 나는 조각에 YouTube API를 구현하려고합니다. 그리고이 오류가 있습니다.Android youtube api viewPager를 사용하여

public class VideoFragment extends YouTubePlayerSupportFragment { 

YouTubePlayerView youTubeView; 
String URL_VIDEO = "CaA-k1l0xa4"; 
String KEY_DEVELOPER = "api key"; 


    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.video_gallery, container, false); 


    YouTubePlayerSupportFragment youTubePlayerSupportFragment = (YouTubePlayerSupportFragment) getFragmentManager().findFragmentById(R.id.youtubeplayerfragment); 

    youTubePlayerSupportFragment.initialize(KEY_DEVELOPER, new OnInitializedListener() { 

     @Override 
     public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, 
       boolean arg2) { 
      // TODO Auto-generated method stub 
      arg1.cueVideo(URL_VIDEO); 
     } 

     @Override 
     public void onInitializationFailure(Provider arg0, 
       YouTubeInitializationResult arg1) { 
      // TODO Auto-generated method stub 

     } 
    }); 
} 

여기에 내 레이아웃

<?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" > 

<fragment 
android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment" 
android:id="@+id/youtubeplayerfragment" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"/>  

</LinearLayout> 

이야 그리고 이것은 내 로그 고양이 :

07-21 03:57:32.042: E/AndroidRuntime(27582): FATAL EXCEPTION: main 
07-21 03:57:32.042: E/AndroidRuntime(27582): Process: com.indomultimedia.hellobali, PID: 27582 
07-21 03:57:32.042: E/AndroidRuntime(27582): java.lang.NullPointerException 
07-21 03:57:32.042: E/AndroidRuntime(27582): at com.google.android.youtube.player.YouTubePlayerSupportFragment.onStart(Unknown Source) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.support.v4.app.Fragment.performStart(Fragment.java:1332) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:906) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.support.v4.view.ViewPager.populate(ViewPager.java:804) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1016) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.View.measure(View.java:17357) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.View.measure(View.java:17357) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1751) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.widget.ScrollView.onMeasure(ScrollView.java:468) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.View.measure(View.java:17357) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.View.measure(View.java:17357) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:38 2) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.View.measure(View.java:17357) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5352) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2505) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.View.measure(View.java:17357) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2175) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1316) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at  android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1513) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1200) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6388) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.Choreographer.doCallbacks(Choreographer.java:603) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.Choreographer.doFrame(Choreographer.java:573) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.os.Handler.handleCallback(Handler.java:733) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.os.Handler.dispatchMessage(Handler.java:95) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.os.Looper.loop(Looper.java:157) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at android.app.ActivityThread.main(ActivityThread.java:5293) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at java.lang.reflect.Method.invokeNative(Native Method) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at java.lang.reflect.Method.invoke(Method.java:515) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
07-21 03:57:32.042: E/AndroidRuntime(27582): at  dalvik.system.NativeStart.main(Native Method) 

누구든지이 오류와 함께 나를 도울 수

여기 내 자바 코드입니까?

<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" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin" 
       android:paddingBottom="@dimen/activity_vertical_margin"     
tools:context="com.examples.ViewPagerWithVideo$PlaceholderFragment"> 

<ImageView 
    android:id="@+id/imageView" 
    android:layout_width="match_parent" 
    android:layout_height="200dp" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:contentDescription="@string/test" 
    android:scaleType="centerCrop" 
    tools:src="@drawable/image_1" 
    android:visibility="invisible" 
    /> 

<FrameLayout 
    android:id="@+id/youtube_fragment_view_pager_placeholder" 
    android:layout_width="match_parent" 
    android:layout_height="200dp" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:visibility="invisible" 
    /> 

</RelativeLayout> 

귀하의 활동은 다음과 같이해야한다 : 나는 비슷한 일을 해요

답변

0

, 이것은 당신이해야 할 무엇을 믿는 것입니다

public class ViewPagerWithVideo extends Activity { 

    /** 
    * The {@link android.support.v4.view.PagerAdapter} that will provide 
    * fragments for each of the sections. We use a 
    * {@link FragmentPagerAdapter} derivative, which will keep every 
    * loaded fragment in memory. If this becomes too memory intensive, it 
    * may be best to switch to a 
    * {@link android.support.v13.app.FragmentStatePagerAdapter}. 
    */ 
    SectionsPagerAdapter mSectionsPagerAdapter; 

    /** 
    * The {@link ViewPager} that will host the section contents. 
    */ 
    ViewPager mViewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_view_pager_with_video); 

     // Create the adapter that will return a fragment for each of the three 
     // primary sections of the activity. 
     mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_view_pager_with_video, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 


    /** 
    * A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
    * one of the sections/tabs/pages. 
    */ 
    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      // getItem is called to instantiate the fragment for the given page. 
      // Return a PlaceholderFragment (defined as a static inner class below). 
      return PlaceholderFragment.newInstance(position); 
     } 

     @Override 
     public int getCount() { 
      // Show 3 total pages. 
      return 3; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      Locale l = Locale.getDefault(); 
      switch (position) { 
       case 0: 
        return getString(R.string.title_section1).toUpperCase(l); 
       case 1: 
        return getString(R.string.title_section2).toUpperCase(l); 
       case 2: 
        return getString(R.string.title_section3).toUpperCase(l); 
      } 
      return null; 
     } 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends Fragment implements YouTubePlayer.OnInitializedListener { 
     /** 
     * The fragment argument representing the section number for this 
     * fragment. 
     */ 
     private static final String ARG_SECTION_NUMBER = "section_number"; 

     /** 
     * Returns a new instance of this fragment for the given section 
     * number. 
     */ 
     public static PlaceholderFragment newInstance(int sectionNumber) { 
      PlaceholderFragment fragment = new PlaceholderFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     int[] images = new int[] {R.drawable.image_1, R.drawable.image_2 }; 

     private static final int RECOVERY_DIALOG_REQUEST = 1; 

     public PlaceholderFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_view_pager_with_video, container, false); 

      int sectionNumber = getArguments().getInt(ARG_SECTION_NUMBER); 
      if (sectionNumber > 0) { 
       ImageView imageView = (ImageView) rootView.findViewById(R.id.imageView); 
       imageView.setImageResource(images[sectionNumber % images.length]); 
       imageView.setVisibility(View.VISIBLE); 
      } else { 
        YouTubePlayerFragment youTubePlayerFragment = new YouTubePlayerFragment(); 
        youTubePlayerFragment.initialize(DeveloperKey.DEVELOPER_KEY, this); 
        FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
        transaction.add(R.id.youtube_fragment_view_pager_placeholder, youTubePlayerFragment, YouTubePlayerFragment.class.getSimpleName()); 
        transaction.commit(); 
        rootView.findViewById(R.id.youtube_fragment_view_pager_placeholder).setVisibility(View.VISIBLE); 

      } 
      return rootView; 
     } 

     @Override 
     public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) { 
      if (!wasRestored) { 
       youTubePlayer.cueVideo("nCgQDjiotG0"); 
      } 
     } 

     @Override 
     public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult errorReason) { 
      String errorMessage = String.format(getString(R.string.error_player), errorReason.toString()); 
      Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if (requestCode == RECOVERY_DIALOG_REQUEST) { 
       // Retry initialization if user performed a recovery action 
       getYouTubePlayerProvider().initialize(DeveloperKey.DEVELOPER_KEY, this); 
      } 
     } 

     protected YouTubePlayer.Provider getYouTubePlayerProvider() { 
      return (YouTubePlayerFragment) getFragmentManager().findFragmentByTag(YouTubePlayerFragment.class.getSimpleName()); 
     } 
    } 

} 

는 사실에 특별한 관심을 넣어 I 정적 조각을 사용하지 않고 placeholderFragment의 onCreateView에서 동적으로 생성됩니다. 또한 FragmentPagerAdapter를 확장하는 SectionsPagerAdapter와 함께 ViewPager를 사용하고 있습니다. 그리고 드로어 블 폴더에서 이미지를 샘플링해야합니다.이 요점을 추가하려는 경우 : https://gist.github.com/moxi/953b985bcd41d9fcde7a

드로어 블 폴더를 쉽게 만들 수 있으며 샘플 이미지를 넣을 수 있습니다.

1

당신이 초기화를 호출하기 전에 먼저 대신 getChildFragmentManager의()) 그럼 난 getActivity().에서 getSupportFragmentManager를 (사용하여 몇 가지 예제를 보았다

FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
transaction.add(R.id.youtube_fragment, youTubeFragment).commit(); 

하여 커밋

YouTubePlayerSupportFragment youTubeFragment = 
       new YouTubePlayerSupportFragment().newInstance(); 

하여 YouTubePlayerSupportFragment을 만들 수 있습니다. 어느 것이 더 정확한지 확실하지 않습니다.

+0

getActivity(). getSupportFragmentManager()가 작동합니다. – amity

관련 문제