1

我有一个RelativeLayouts,我想把它作为一个头添加到ExpandableList中。基本上,布局与我用于列表中的子视图的布局相同。ExpandableListView.addHeaderView()没有保留布局参数

这里的布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="72dp" 
    android:paddingTop="16dp" 
    android:paddingBottom="16dp" 
    android:paddingLeft="50dp" 
    android:paddingStart="50dp" 
    android:paddingRight="16dp" 
    android:paddingEnd="16dp"> 

    <TextView 
     android:id="@+id/category_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Electricity" 
     android:textAppearance="@style/TextAppearance.AppCompat.Subhead"/> 

    <TextView 
     android:id="@+id/current_balance" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:text="Rp 300.000" 
     android:textAppearance="@style/TextAppearance.AppCompat.Subhead"/> 

    <TextView 
     android:id="@+id/current_budget" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:text="Rp800.000" 
     android:textAppearance="@style/TextAppearance.AppCompat.Body1" 
     android:textColor="@color/secondary_text"/> 

    <TextView 
     android:id="@+id/current_expenses" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentBottom="true" 
     android:text="Rp800.000" 
     android:textAppearance="@style/TextAppearance.AppCompat.Body1" 
     android:textColor="@color/secondary_text"/> 

</RelativeLayout> 

然后我里面添加onCreateView标题如下:

View view = inflater.inflate(R.layout.fragment_budget_list, container, false); 

View listHeader = inflater.inflate(R.layout.row_budget_item, null); 
// populate views in the header 

ExpandableListView listView = (ExpandableListView) view.findViewById(R.id.list_budget); 
listView.addHeaderView(listHeader); 
listView.setAdapter(mAdapter); 

头被证明,不过,它看起来像的高度改为0,因为第一行(category_name和current_balance)中的TextViews与第二行(current_budget和current_expenses)重叠。

这是因为布局是转换为AbsListView(注为列表的子视图使用时的布局是正确显示)? 如何保留布局参数? 我试过listHeader.setMinimumHeight(),但它不起作用

回答

1

充气头布局显然,当发现我的答案从这个post

,我需要提供ExpandableListView为根,以falseattachToRoot。因此,布局参数值将被提供给根视图。因此,代码如下所示:

View view = inflater.inflate(R.layout.fragment_budget_list, container, false); 
ExpandableListView listView = (ExpandableListView) view.findViewById(R.id.list_budget); 

View listHeader = inflater.inflate(R.layout.row_budget_item, listView, false); 

docs

:可选视图是产生层次的父(如果attachToRoot是真实的),或者只是一个对象提供用于返回的层次结构的根目录的 组的LayoutParams值(如果 attachToRoot是假的。)

0

我在布局中看不到列表视图。 如果你想在你的列表中的头,我建议你加入这样的:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/activity_chat_listView" 
    android:layout_above="@+id/linearLayout" 
    android:stackFromBottom="true" 
    android:paddingBottom="3dp" 
    android:transcriptMode="alwaysScroll"/> 
</RelativeLayout> 

然后在的onCreate添加mListView.setAdapter(mChatAdapter);其中private ChatAdapter mChatAdapter; 我认为这个布局您提供的,将通过Loader<Cursor> 现在加载多次,在ChatAdapter bindView或GetView中,只要你希望这个头部可见或不见,就可以决定。

有许多Cursor适配器可以看到的很好的例子。 这里检查一个https://thinkandroid.wordpress.com/2010/01/11/custom-cursoradapters/ 这取决于您的需求。 希望它有助于