我的活动中有一个类VideoFragment。
public static class VideoFragment extends YouTubePlayerFragment
implements YouTubePlayer.OnInitializedListener {
private YouTubePlayer player;
private String videoId;
public int height;
public static VideoFragment newInstance() {
return new VideoFragment();
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initialize(getString(R.string.api_key), this);
}
@Override
public void onDestroy() {
if (player != null) {
player.release();
}
super.onDestroy();
}
public void setVideoId(String videoId) {
if (videoId != null && !videoId.equals(this.videoId)) {
this.videoId = videoId;
if (player != null) {
player.cueVideo(videoId);
}
}
}
public void pause() {
if (player != null) {
player.pause();
}
}
@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider,
YouTubePlayer player, boolean restored) {
this.player = player;
player.addFullscreenControlFlag(YouTubePlayer.FULLSCREEN_FLAG_CUSTOM_LAYOUT);
player.setOnFullscreenListener((VideoOptionTemplate) getActivity());
if (!restored && videoId != null) {
player.loadVideo(videoId);
// player.play();
}
player.play();
}
@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {
this.player = null;
}
}
我需要创建一个带有静态计数的for循环,将每个循环中的片段添加到我的线性中。但是,每个片段都必须有不同的id,这样我就可以在每个循环中加载youtube视频。
这就是我创建循环的方式
for(int i=0;i<10;i++)
{
LayoutInflater inflater = VideoOptionTemplate.this.getLayoutInflater();
View to_add = inflater.inflate(R.layout.video_layout,
pagelayout, false);
final LinearLayout childlayout = (LinearLayout) to_add.findViewById(R.id.layoutoption);//this layout contains the fragment of video player with specific id
TextView counttxt = (TextView) to_add.findViewById(R.id.counttxt);
counttxt.setText(String.valueOf(i + 1));
pagelayout.addView(childlayout, i);
}
这是我在每个循环中调用的布局,并添加到父布局中
<LinearLayout
android:id="@+id/uploadlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="upload"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/optionimg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:paddingBottom="10dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="10dp"
android:src="@drawable/video"
android:textColor="@android:color/black" />
<EditText
android:id="@+id/optionvideo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_toRightOf="@+id/subject"
android:layout_weight="1"
android:background="@android:color/transparent"
android:paddingBottom="15dp"
android:paddingLeft="5dp"
android:paddingRight="10dp"
android:paddingTop="15dp"
android:text="Add your video"
android:textSize="12sp" />
</LinearLayout>
<fragment
android:id="@+id/video_fragment_container"
class="u2vote.activities.VideoOptionTemplate$VideoFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center" />
</LinearLayout>
这有点棘手。您实际上是在尝试将片段添加到动态视图中,这不是开箱即用的支持。也就是说,你可能可以做两件事:
-
您可以将fragment标记替换为FrameLayout,并使用添加fragmentFragmentTransaction。为此,您需要指定FrameLayout,这显然将是相同的动态视图。为了解决这个问题,你可以做的是手动为这些FrameLayout提供自定义id,如下所述:https://stackoverflow.com/a/18296943/504855
-
一个不那么棘手的方法可能是将这些碎片包裹在另一个碎片中。片段支持库支持子片段,因此您可以将现有布局转换为片段,并在包装片段中使用getChildFragmentManager()以编程方式将PlayerFragment添加到其中。然后可以使用活动的常规FragmentManager将包装器直接添加到"页面布局"中。