在onCreateView中向listFragment添加静态头

时间:2011-06-28 00:25:28

标签: android android-layout

如何在listFragment中的listview中添加一个简单的静态标头?我想从xml def创建标题并通过膨胀添加它。

我的onCreateView:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) {
    View detailList = inflater.inflate(R.layout.detail_fragment, container, false);
    View detailListHeader = inflater.inflate(R.layout.daily_sales_header, null, false);
    container.addView(detailListHeader, 0);
    return detailList;
}

这会创建标题,但它不在列表视图之上,而是列表视图显示在标题下方,即标题覆盖列表视图。

有关正确实施的任何提示吗?

2 个答案:

答案 0 :(得分:8)

将hackbod的描述放入代码中,因为他的答案在答案出现之前创建了更多问题。有时我只想要鱼。我并不总是需要知道网是如何制作的......

首先,创建一个如下所示的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myListViewWithHeader"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="6dp"
        android:textStyle="bold"
        android:textSize="20sp" />

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false" />

    <TextView
        android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

然后,在onCreateView方法中执行此操作:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.myListViewWithHeader, null);
    return view;
}

现在可以通过以下方式填充标题:

// get the header view
TextView headerView = (TextView) getView().findViewById(R.id.header);
headerView.setText("Header text goes here");

请注意,我的标题是TextView,但如果您愿意,可以将其替换为其他视图。在这种情况下,您需要为要使用的标头内的每个视图执行getView()。findViewById(R.id.xxxxx)

答案 1 :(得分:3)

您永远不应该在onCreateView()中直接向容器添加视图。请阅读文档:http://developer.android.com/reference/android/app/Fragment.html#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)

另请参阅Fragment文档中的各种示例代码以及API演示:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/index.html

在这里使用片段并没有什么特别之处。只需构建一个包含ListView的视图层次结构,就像在Activity或其他地方一样。您总是需要从onCreateView返回一个View;这是您的层次结构的根。

例如,您可以创建ListView,然后使用它向其添加标题:http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View