ExpandableListView.addHeaderView() 没有保留布局参数
Posted
技术标签:
【中文标题】ExpandableListView.addHeaderView() 没有保留布局参数【英文标题】:ExpandableListView.addHeaderView() did not retain layout parameter 【发布时间】:2015-06-11 00:37:27 【问题描述】:我有一个RelativeLayouts,我想将它作为标题添加到ExpandableList。基本上,布局与我用于列表中子视图的布局相同。
这是布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
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_
android:layout_
android:text="Electricity"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"/>
<TextView
android:id="@+id/current_balance"
android:layout_
android:layout_
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_
android:layout_
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_
android:layout_
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,因为第 1 行中的 TextViews(category_name 和 current_balance)与第 2 行(current_budget 和 current_expenses)重叠。
(注意:当作为列表的子视图时,布局显示正确)
这是因为布局被转换为 AbsListView 吗?
如何保留布局参数?
我试过listHeader.setMinimumHeight()
但它不起作用
【问题讨论】:
【参考方案1】:从post找到我的答案
显然,在扩展标题布局时,我需要提供ExpandableListView
作为根,并将false
提供给attachToRoot
。因此,布局参数值将提供给根视图。所以代码看起来像这样:
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:
root:作为生成层次结构的父级的可选视图(如果 attachToRoot 为真),或者只是一个提供 返回层次结构的根的 LayoutParams 值集(如果 attachToRoot 为假。)
【讨论】:
【参考方案2】:我没有在您的布局中看到列表视图。 如果您想要列表中的标题,我建议您像这样添加它:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_>
<ListView
android:layout_
android:layout_
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);
where private ChatAdapter mChatAdapter;
我假设您提供的此布局将通过Loader<Cursor>
加载多次
现在,在 ChatAdapter bindView 或 GetView 中,您将决定何时希望此标题可见或消失。
游标适配器有很多很好的例子。 在这里查看一个https://thinkandroid.wordpress.com/2010/01/11/custom-cursoradapters/ 这取决于您的需求。 希望对你有帮助
【讨论】:
以上是关于ExpandableListView.addHeaderView() 没有保留布局参数的主要内容,如果未能解决你的问题,请参考以下文章