2017-01-18 19 views
1

私は自分のアクティビティにクラスVideoFragmentを持っています。Android私のレイアウトにビデオフラグメントを動的に追加する方法

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

私は一人一人で、その後ユーチューブの動画を読み込むことができますので、すべてのフラグメントが異なるIDを持っている必要があり、私のlinearlyoutに各ループ内の断片を追加するために、静的な数でループのために作成する必要があります。

これは、私は、これはこれは少しトリッキーです

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

答えて

0

私はすべてのループで呼び出して、私は私の親のレイアウトに追加する私のレイアウトであるループ

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

を作成する方法です。基本的にフラグメントを動的ビューに追加しようとしていますが、これは非常にうまくサポートされていません。

  1. 代わりにレイアウトの内側にフラグメントを追加するのでは でframeLayoutとフラグメントタグを交換し、 FragmentTransactionを使用してフラグメントを追加することができます。それはあなたがおそらく何ができる二つのものがある、と述べました。そのためには、 FrameLayoutのIDを指定する必要があります。これは明らかにすべての 動的ビューで同じです。 https://stackoverflow.com/a/18296943/504855

  2. をあまりハック方法は、別の断片内に、これらのフラグメントをラップするかもしれません:あなたはこの問題を回避するために行うことができますことは、ここで説明したように、それらでframeLayoutカスタムIDを与える手動 にあります。フラグメントサポートライブラリは子フラグメントをサポートしているので、あなたが持っているそのレイアウトをフラグメントにして、ラッピングフラグメント内のgetChildFragmentManager()を使ってPlayerFragmentをプログラムで追加することができます。ラッパーは、アクティビティの通常のFragmentManagerを使用して、「pagelayout」に直接追加できます。

関連する問題