在ListView中动态更新列表元素高度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ListView中动态更新列表元素高度相关的知识,希望对你有一定的参考价值。

我有一份清单。当您单击元素时,它将被选中,并应垂直扩展以替换更多数据。

我试图通过添加到每个元素的布局“详细信息”视图来实现这一点,该视图由dafault隐藏并设置为VISIBLE onClick。

唯一的问题是元素的高度没有改变。如果我尝试这样:

                    holder.line_view
                        .setLayoutParams(new LinearLayout.LayoutParams(
                                LayoutParams.FILL_PARENT, dip(
                                        convertView.getContext(), 30)));

然后我得到了未知的异常。只是

holder.details_pane.setVisibility(View.VISIBLE);

不起作用,尺寸不变。

请指教。


布局:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/line_view">
<TextView
    android:id="@+id/desc"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="Description" />
<TextView
    android:text="LALALA"
    android:id="@+id/detailed_desc"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

在适配器中我尝试:

 @Override
            public View getView(int position, View convertView, ViewGroup parent) {
...
switch (getItemViewType(position)) {
case TYPE_ITEM_EXPANDED:
                    holder.details_pane.setVisibility(View.VISIBLE);
...
case TYPE_ITEM_NORMAL:
                    holder.details_pane.setVisibility(View.GONE);
                }
答案

“不起作用,尺寸不变”

如果允许旋转视图,请尝试尝试:让视图重绘自己并查看行是否更大。

可能是您只需要使列表视图无效以便重绘。可能使行无效。

也许它甚至像调用notifyDataSetChanged()一样简单;在自定义列表视图适配器上

另一答案

我不知道你的代码问题。但你应该试试这个

com.android.widget.ExpandableListView
com.android.widget.ExpandableListAdapter

这是根据您的要求设计的,随OS一起提供

以上是关于在ListView中动态更新列表元素高度的主要内容,如果未能解决你的问题,请参考以下文章

当 listview 行项目中包含隐藏视图时,片段不尊重匹配父高度

根据里面的多行文本视图动态设置 ListView 高度

片段内 Listview 中动态视图的 onClick 侦听器

在垂直列表视图中颤动动态高度水平列表视图

android动态设置listview高度

从片段向数据库中插入值时ListView不更新