【问题标题】:Android - Activity with YouTubePlayerFragment blank and unresponsiveAndroid - YouTubePlayerFragment 的活动空白且无响应
【发布时间】:2015-02-28 06:06:00
【问题描述】:

我正在尝试构建示例 Android 应用程序,其中主要活动包含多个片段,包括 YouTubePlayerFragment。我的实现没有任何错误,但是当我在模拟器或手机上运行应用程序时,主要活动完全空白且无响应。如果我删除包含 YouTube 播放器的片段,该应用程序可以正常工作。

非常感谢任何帮助。

这是我的代码:

YouTubeFragment.java

package androidsample.example.com.fragments1;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import android.widget.Toast;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerFragment;

public class YouTubeFragment extends YouTubePlayerFragment implements YouTubePlayer.OnInitializedListener {

    // TODO: Rename and change types and number of parameters
    public static YouTubeFragment newInstance() {
        YouTubeFragment fragment = new YouTubeFragment();
        return fragment;
    }

    private void init(){
        initialize(DeveloperKey.DEVELOPER_KEY, this);
    }

    public YouTubeFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_you_tube, container, false);

        YouTubeFragment ytf = newInstance();
        ytf.init();
        //inside fragment use getFragmentManager instead of getFragmentSupportManager
        getFragmentManager().beginTransaction()
                .add(R.id.youTubePlayer, ytf)
                .commit();

        return view;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

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

    @Override
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
        Toast.makeText(getActivity(), "Failured to Initialize!", Toast.LENGTH_LONG).show();
    }


}

fragment_you_tube.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="androidsample.example.com.fragments1.YouTubeFragment"
>

  <FrameLayout 
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:id="@+id/youTubePlayer">
  </FrameLayout>

</LinearLayout>

MainActivity.java

package androidsample.example.com.fragments1;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends ActionBarActivity {

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


    @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_main, 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);
    }
}

activity_main.xml

<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=".MainActivity">

    <fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name="androidsample.example.com.fragments1.Frag2"
        android:id="@+id/fragment"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name="androidsample.example.com.fragments1.Frag1"
        android:id="@+id/fragment2"
        android:layout_below="@+id/fragment"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="56dp" />

    <fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name="androidsample.example.com.fragments1.YouTubeFragment"
        android:id="@+id/fragment3"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="68dp" />


</RelativeLayout>

【问题讨论】:

    标签: java android android-layout android-fragments youtube-api


    【解决方案1】:

    在一些帮助下,我有一个工作版本(目标 SDK 21 的问题,使用 19):

    YouTubeFailureRecoveryActivity.java

    package androidsample.example.com.fragments2;
    
    import android.widget.Toast;
    
    import com.google.android.youtube.player.YouTubeBaseActivity;
    import com.google.android.youtube.player.YouTubeInitializationResult;
    import com.google.android.youtube.player.YouTubePlayer;
    import com.google.android.youtube.player.YouTubePlayerFragment;
    
    
    public class YouTubeFailureRecoveryActivity extends YouTubeBaseActivity implements
            YouTubePlayer.OnInitializedListener{
    
        private static final int RECOVERY_DIALOG_REQUEST = 1;
    
        @Override
        public void onInitializationFailure(YouTubePlayer.Provider provider,
                                            YouTubeInitializationResult errorReason) {
            if (errorReason.isUserRecoverableError()) {
                errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show();
            } else {
                //String errorMessage = String.format(getString(R.string.error_player), errorReason.toString());
                String errorMessage = "custom ERror MessAgE";
                Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
            }
        }
    
        @Override
        public void onInitializationSuccess(YouTubePlayer.Provider arg0, YouTubePlayer player,
                                            boolean wasRestored) {
            // TODO Auto-generated method stub
            if (!wasRestored) {
                player.cueVideo("nCgQDjiotG0");
            }
        }
    
        protected YouTubePlayer.Provider getYouTubePlayerProvider() {
            // TODO Auto-generated method stub
            return (YouTubePlayerFragment) getFragmentManager().findFragmentById(
                    R.id.youtube_fragment);
        }
    }
    

    MainActivity.java

    package androidsample.example.com.fragments2;
    
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import com.google.android.youtube.player.YouTubePlayerFragment;
    
    public class MainActivity extends YouTubeFailureRecoveryActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            YouTubePlayerFragment youTubePlayerFragment = (YouTubePlayerFragment) getFragmentManager()
                    .findFragmentById(R.id.youtube_fragment);
            youTubePlayerFragment.initialize(DeveloperKey.DEVELOPER_KEY, this);
        }
    
    
        @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_main, 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);
        }
    
    
    }
    

    activity_main.xml

    <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=".MainActivity">
    
    
        <fragment
            android:id="@+id/youtube_fragment"
            android:name="com.google.android.youtube.player.YouTubePlayerFragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </RelativeLayout>
    

    【讨论】:

      猜你喜欢
      • 2016-07-08
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      相关资源
      最近更新 更多