ListView包含自定义适配器和其他视图元素

时间:2013-02-01 17:58:42

标签: android android-layout

我正在学习使用Hierarch Viewer tool,但同时有任何关于下面布局无法正确渲染的提示,我们表示赞赏。

我正在尝试渲染“html”表格视图。使用自定义列表适配器正确呈现内容(表正文)。这有效。但是,当我添加一个textView(下面的text_test)用作标题时,列表不再呈现。我可以看到代码流经我的适配器(填充视图持有者等),但在屏幕上我只看到标题文本,没有listView。我以前使用FrameLayout(如注释中所述),但后来切换到LinearLayout。

感谢。

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.my_list_view, container,
                false);
        ListView lv = (ListView)view.findViewById(R.id.my_list_view_one);
        // Tell the list view which view to display when the list is empty
        //lv.setEmptyView(getActivity().findViewById(R.id.my_list_view_empty));

        // Set up the adapter
        mCustomAdapter = new ListAdapterMyType(inflater, new ArrayList<MyType>());
        lv.setAdapter(mCustomAdapter);
        return  view;
    }

my_list_view.xml

    <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <!-- The frame layout is here since we will be showing either
the empty view or the list view.  -->
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dip"
            android:layout_weight="1">

        <TextView
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:text="@string/text_test"/>

        <ListView
                android:id="@+id/my_list_view_one"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:drawSelectorOnTop="false"/>

        <!-- Here is the view to show if the list is emtpy -->
        <TextView android:id="@+id/my_list_view_empty"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:text="@string/list_no_items"
                  android:visibility="gone"/>

    </LinearLayout>
    </LinearLayout>

1 个答案:

答案 0 :(得分:1)

  

但是,当我添加一个textView(下面的text_test)用作标题时,列表不再呈现。

TextView在宽度和高度都设置为match_parent,因此它将填满整个屏幕......要将TextView放在ListView上方,请尝试:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:orientation="vertical">

    <TextView
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:text="@string/text_test"/>

    <ListView
            android:id="@+id/my_list_view_one"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:drawSelectorOnTop="false"/>

    <!-- Here is the view to show if the list is emtpy -->
    <TextView android:id="@+id/my_list_view_empty"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:text="@string/list_no_items"
              android:visibility="gone"/>

</LinearLayout>

我删除了外部的LinearLayout,因为它只有一个孩子它没有做任何事情。我还将剩余的LinearLayout的方向更改为vertical,并将标题TextView高度设置为wrap_content

如果您希望自定义标题与ListView一起滚动,请使用addHeaderView()方法(在调用setAdapter()之前)而不是布局中单独的TextView。当ListView为空时,此方法也会隐藏标题。