1

I have a class VideoFragment in my activity.

  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;
    }
}

i need to create a for loop with static count to add a fragments in each loop to my linearlyout, every fragment must have a different id so i can load a youtube video after that in every one.

this is how i create the loop

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);
 }

this is my layout that i call in every loop and i add to my parent layout

<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>
Malo
  • 1,232
  • 2
  • 17
  • 28

1 Answers1

0

This is a bit tricky. You're essentially trying to add fragments to dynamic views, which isn't supported out of the box very well. That said, there are two things you could probably do:

  1. Instead of adding the fragment inside of the layout, you could replace the fragment tag with FrameLayout and add the Fragment using a FragmentTransaction. For that, you need to specifiy the ID of the FrameLayout though, which will obviously be the same for all your dynamic views. What you can do to work around this issue is to manually give those FrameLayout custom ids, like explained here: https://stackoverflow.com/a/18296943/504855

  2. A less hacky way might be to wrap those Fragments within another fragment. The fragment support library supports child fragments, so you could turn that layout you have into a Fragment, and add the PlayerFragment to that programatically using getChildFragmentManager() within the wrapping fragment. The wrappers could then be added straight to the "pagelayout" using the regular FragmentManager of your activity.

Community
  • 1
  • 1
Timo Ohr
  • 7,947
  • 2
  • 30
  • 20