gpt4 book ai didi

java - 使用 YouTubePlayerFragment 时出现空白黑框

转载 作者:行者123 更新时间:2023-12-02 06:05:27 24 4
gpt4 key购买 nike

编辑 cjohn捕获了缺失的一 block 。我忘记在 YTPlayerFragment 上调用 init()

Android 开发新手。我试图将 YouTube 视频放入 YouTubePlayerFragment 中,该 fragment 嵌套在另一个 fragment 中。 Logcat 没有显示任何错误,但我的播放器 fragment 只显示一个黑框。将日志语句放在我的 OnInitializedListener 中,似乎它甚至没有被调用。

包含 YouTubePlayerFragment 的 ContentFragment 是 ViewPager 内的一个选项卡。我的代码如下。 MainActivity ContentFragment、ContentFragment 包含 YouTubePlayerFragment。

MainActivity.java:

public class MainActivity extends FragmentActivity{

TabsPagerAdapter mAdapter;
ViewPager mViewPager;
Boolean mLoggedIn;

String[] mTabs = {"Library", "Content", "Quotes"};

@Override
protected void onCreate(Bundle savedInstanceState) {
final ActionBar actionBar = getActionBar();

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.viewPager);
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}

@Override
public void onPageScrollStateChanged(int state) {

}
});
mViewPager.setAdapter(mAdapter);

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

ActionBar.TabListener tabListener = new ActionBar.TabListener() {
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
mViewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {

}

@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {

}
};

for (String tab : mTabs) {
actionBar.addTab(actionBar.newTab().setText(tab).setTabListener(tabListener));
}


}

}

TabsPagerAdapter.java:

public class TabsPagerAdapter extends FragmentPagerAdapter{
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {
switch(position) {
case 0:
return new LibraryFragment();
case 1:
return new ContentFragment();
case 2:
return new QuotesFragment();
}

return null;
}

@Override
public int getCount() {
return 3;
}
}

ContentFragment.java:

public class ContentFragment extends Fragment {

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

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

@Override
public void onResume() {
super.onResume();

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setRetainInstance(true);
View v = inflater.inflate(R.layout.fragment_content, container, false);
YTPlayerFragment video = YTPlayerFragment.newInstance("nCgQDjiotG0");
getFragmentManager().beginTransaction().replace(R.id.youtubeFragment, video).commit();
return v;
}

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

}

}

YTPlayerFragment.java:

public class YTPlayerFragment extends YouTubePlayerSupportFragment {

private YouTubePlayer activePlayer;
private final static String DEV_KEY = "KEY";

public static YTPlayerFragment newInstance(String url) {

YTPlayerFragment player = new YTPlayerFragment();

Bundle bundle = new Bundle();
bundle.putString("url", url);

player.setArguments(bundle);
return player;
}


private void init() {
initialize(DEV_KEY, new YouTubePlayer.OnInitializedListener() {
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
activePlayer = youTubePlayer;
Log.d("YOUTUBE", "Successfully initialized");
activePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
if (!b) {
activePlayer.cueVideo(getArguments().getString("url"));
}
}

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
Log.e("YOUTUBE", youTubeInitializationResult.toString());
}
});
}


}

fragment_content.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:padding="2dp"
android:clipToPadding="false"
android:scrollbarStyle="outsideOverlay"
android:orientation="vertical" >
<FrameLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/youtubeFragment" />

</LinearLayout>

最佳答案

在您的 ContentFragment 中,您尝试添加另一个 Fragment 作为子项。为此,您需要通过调用 getChildFragmentManager() 获取 fragment 管理器:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setRetainInstance(true);
View v = inflater.inflate(R.layout.fragment_content, container, false);
YTPlayerFragment video = YTPlayerFragment.newInstance("nCgQDjiotG0");
getChildFragmentManager().beginTransaction().replace(R.id.youtubeFragment, video).commit();
return v;
}

关于java - 使用 YouTubePlayerFragment 时出现空白黑框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22334839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com