如何将ListView扩展为列表项填充?

时间:2010-08-23 08:59:52

标签: android

基本上我在点击“+​​”按钮时会尝试重新创建默认联系人屏幕。另一行电话号码已添加到列表中。

现在我有一个ImageView作为“+”按钮和一个ListView来包含电话号码列表。问题是当我在列表中添加更多项目时,ListView不会展开。

我可以使用LinearLayout构建相同的外观但是如何以这种方式保存所有这些数字?

以下是将使用自定义适配器

进行充气的项目布局
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="60px"
  android:stretchColumns="1"
  android:background="#FFFFFFFF"
  android:gravity="center_vertical">
  <TableRow>
    <Button
        android:id="@+id/type"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="10dp"
        android:text="Home" />
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            >   
            <EditText
                android:id="@+id/value"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_alignParentLeft="true"
                android:text=""
                android:hint="Name"
                android:lines="1"
                android:textSize="10pt"
                android:typeface="sans"
                android:textColor="#FF000000"
                android:gravity="left"
                />
        </RelativeLayout>
    <ImageView
      android:id="@+id/del"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_alignParentTop="true"
      android:paddingRight="14dp"
      android:src="@android:drawable/ic_delete" />
  </TableRow>
</TableLayout>

这是ListView部分。

<ListView
                  android:id="@+id/phoneList"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:background="#FFFFFFFF"
                  android:scrollbars="none" />

这真令人困惑:S。有人可以帮我吗?

3 个答案:

答案 0 :(得分:1)

您应该使用ViewStub

  

ViewStub是一个不可见的,零大小的   可以懒惰地使用的视图   在运行时膨胀布局资源。   当ViewStub可见时,或   当调用inflate()时,布局   资源膨胀。

Here您有一些教程,或者您可以克隆android's git repo来检查他们是如何做到的。

答案 1 :(得分:1)

我已经构建了一个动画类,它将边距设置为负值,使项目消失。

动画如下所示:

public class ExpandAnimation extends Animation {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    super.applyTransformation(interpolatedTime, t);

    if (interpolatedTime < 1.0f) {

        // Calculating the new bottom margin, and setting it
        mViewLayoutParams.bottomMargin = mMarginStart
                + (int) ((mMarginEnd - mMarginStart) * interpolatedTime);

        // Invalidating the layout, making us seeing the changes we made
        mAnimatedView.requestLayout();
    }
}
}

我在博客文章中有一个完整的动画示例应用: http://udinic.wordpress.com/2011/09/03/expanding-listview-items/

答案 2 :(得分:0)

我最终创建了自己的类,扩展了LinearLayout,每次添加或删除项目时都会重新计算其大小。我确信代码很脏并且占用了很多记忆,但它现在都有用。