膨胀后碎片不显示[固定,但......]

时间:2011-12-01 10:57:48

标签: android fragment

我正在尝试创建一个在我的所有活动中都可见的音乐播放器。要做到这一点,我将使用Fragment,因为你们中的一些人早先建议我。

由于我没有Fragments的任何经验,所以我决定首先在“填充”活动中实现一个片段。 我创建了一个只包含一个按钮和一些文本的简单片段,并尝试在我的填充活动中对其进行充气。

然而,在充气后这个片段没有显示出来。消息确实打印到LogCat,告诉我片段已经膨胀。

我很确定我错过了什么,但由于我没有这方面的经验,我找不到一个很好地解释如何做到这一点的教程,我不知道我是什么丢失。

音乐播放器片段

public class AppMusicPlayer extends Fragment{


     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
         System.out.println("fragment added");
            return inflater.inflate(R.layout.musicplayer_main, container, false);
        }


}

音乐播放器布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >


    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is the fragment you're looking for" />

</LinearLayout>

填充活动

public class Filler extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.filler);

        Button b = (Button) findViewById(R.id.terug);
        b.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                Intent intent = new Intent();
                setResult(RESULT_OK, intent);
                finish();
            }
        });

    }

}

填充程序布局

<?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:orientation="vertical" >
<!-- Title bar -->
    <RelativeLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:background="@drawable/title_bar" >

        <TextView
            android:id="@+id/fillertitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:text="Work In Progress"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textStyle="bold" >
        </TextView>

        <Button
            android:id="@+id/terug"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_centerVertical="true"
            android:background="@drawable/button_back"
            android:text="Back"
            android:textColor="#FFFFFFFF"
            android:textStyle="bold" >
        </Button>
    </RelativeLayout>
<!-- End of title bar -->
    <TextView
        android:id="@+id/wip"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="This section of the app has not been made yet. Work in progress." >
    </TextView>

    <fragment
        android:id="@+id/musicPlayerFragment"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:name="com.mobowski.app.player.AppMusicPlayer" />

</LinearLayout>

显然我做错了什么,但是什么?

注意:我正在使用Android 2.3和兼容性库。

感谢任何帮助


在Yashwanth Kumar和blessenm的帮助下解决了这个问题。一个是XML解决方案,另一个是程序化解决方案。现在我只是想知道哪种解决方案是最理想的解决方案。是否可以使用任何一种解决方案做出任何让步,还是归结为程序员首选的解决方案?

2 个答案:

答案 0 :(得分:9)

我没有尝试将片段直接添加到xml中。但我通常做的是在填充布局中添加framelayout或linearlayout。

假设它的id是'fragment_holder'。我在setContentView之后立即在片段活动中使用以下代码。试试这个

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragment_holder,new AppMusicPlayer(),"musicplayer");
ft.commit();

答案 1 :(得分:7)

你应该提到layout_height为0dip,而不是垂直线性布局中的宽度。

改变它应该有效。

<fragment
        android:id="@+id/musicPlayerFragment"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:name="com.mobowski.app.player.AppMusicPlayer" />