添加到linearLayout的片段是堆叠,只有最后添加的片段是可见的

时间:2013-12-16 21:35:19

标签: android android-layout android-linearlayout

我有一个包含YouTubePlayerSupportFragment的视图,其周围有一个小方框用于样式化。我想将此视图的多个实例(垂直)添加到另一个视图。我有它可以添加一个视图,但是当我尝试添加多个时,它们只是相互堆叠,因此只有最后添加的那个是可见的。我能够通过编程方式使第一个视图添加更长时间来证明这种情况正在发生,我可以在最顶层的视图下看到它的额外高度。

这是我的代码:

fragment_youtube_video:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="5dp"
    android:layout_marginTop="5dp"
    android:background="#FFFFFFFF">

    <fragment
        android:id="@+id/youTubeVideo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment" />

    <TextView
        android:id="@+id/videoTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="4dp"
        android:layout_marginBottom="8dp"
        android:textColor="#000000"
        android:text="Video" />

</LinearLayout>

fragment_videos:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background">

    <ImageView
        android:id="@+id/topBar" 
        android:background="#000000"
        android:layout_width="match_parent"
        android:layout_height="45dp" />

    <ImageView
        android:id="@+id/logoImageView"
        android:layout_width="120dp"
        android:layout_height="60dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:contentDescription="@string/CD_logo"
        android:src="@drawable/logo" />

    <RelativeLayout 
       android:id="@+id/pagerTitle"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_below="@+id/logoImageView"
       android:background="#80000000"
       android:paddingBottom="10dp"
       android:paddingLeft="2dp"
       android:paddingRight="2dp"
       android:paddingTop="10dp"
       android:layout_marginLeft="12dp"
       android:layout_marginTop="5dp"
       android:layout_marginRight="12dp" >
    [REMOVED FOR SPACE]
    </RelativeLayout>
    <ScrollView 
        android:id="@+id/scrollableVideoBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/pagerTitle"
        android:layout_alignRight="@+id/pagerTitle"
        android:layout_below="@+id/pagerTitle">
        <LinearLayout 
           android:id="@+id/videosLayout"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:orientation="vertical"
           android:background="#a0000000">
       </LinearLayout>
   </ScrollView>
</RelativeLayout>

VideosFragment.java:

private void addVideoViews() {
    int count = 0;
    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    for (String  vidURL : videoURLs) {
        new YoutubeFragment();

        YoutubeFragment player = YoutubeFragment.newInstance(count, vidURL);
        fragmentTransaction.add(R.id.videosLayout, player, "x_" + count);

        count++;
    }
    fragmentTransaction.commit();
}

我可以提供更多代码,但我相信这些是必要的部分。如果我这样做不正确,也请随时告诉我。我是如此接近,我只是无法弄清楚为什么他们正在堆叠。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

我们进入了聊天,这就是我们的目标:

LinearLayout parentLayout = (LinearLayout) view.findViewById(R.id.videosLayout); 
FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
LayoutInflater inflater = LayoutInflater.from(getActivity()); 

for (String vidURL : videoURLs) { 
final String vidUrl2 = vidURL; 
LinearLayout placeholder = (LinearLayout) inflater.inflate(R.layout.fragment_youtube_video, container, false); 
View youtuber = placeholder.findViewById(R.id.youTubeVideo); 
YouTubePlayerSupportFragment player = new YouTubePlayerSupportFragment(); 
fragmentTransaction.add(youtuber.getId(), player); 
placeholder.setId(12345); 
parentLayout.addView(placeholder); 

player.initialize("secret", new OnInitializedListener() { 

@Override 
public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, 
boolean arg2) { 
if (!arg2) { 
arg1.cueVideo(vidUrl2); 
} 
    } 

    @Override 

public void onInitializationFailure(Provider arg0, 
YouTubeInitializationResult arg1) { 

} 
}); 
} 
fragmentTransaction.commit();

占位符是一个带有两个子节点的LinearLayout,一个用于保存youtube片段的LinearLayout和一个用于保存标题的TextView。

答案 1 :(得分:0)

我假设,当您添加多个视频时,您只是在片段中交换它们。没有多个片段,因此在任何给定时间只能显示一个视频。

我认为您应该使用ListView,这样,您可以使用大量具有相同总体布局资源的视频填充它。希望这会有所帮助。