如何防止ListView之外的视图被夸大?

时间:2013-12-20 21:33:32

标签: android android-layout listview android-listview

我对Android开发者来说比较新,所以如果这是一个基本问题,请原谅我。我有一个ListActivity,它在加载信息时显示进度条,然后隐藏。但是,它下面的listview的每一行都有自己的进度条。我怎样才能防止这种情况发生?我发现了一些类似的问题,但没有正确的答案。 编辑:这是resultslist.xml:

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

    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/results_list_progress_bar"/>

    <ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/list"
        android:layout_below="@id/results_list_progress_bar"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />
    <ImageView
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:id="@+id/result_icon"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="6dip"
        android:contentDescription="TODO" />
    <TextView
        android:id="@+id/result_title"
        android:layout_width="fill_parent"
        android:layout_height="26dip"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@id/result_icon"
        android:ellipsize="marquee"
        android:singleLine="true"
        android:textSize="12sp"
        />
    <TextView
        android:id="@+id/result_description"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/result_title"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:layout_alignWithParentIfMissing="true"
        android:layout_toRightOf="@id/result_icon"
        android:gravity="center_vertical"
        android:singleLine="true"
        android:textSize="12sp"
        />
</LinearLayout>

它的价值,这里是我的数组适配器的代码:

    LayoutInflater inflater = (LayoutInflater)context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.resultslist, parent, false);

这是一张图片,显示了每行顶部的进度条:

enter image description here

任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:2)

我相信您正在与activity view充气list item view,请查看适配器的视图

从您的更新开始,可以看出您实际上正在夸大相同的视图

溶液:

您的主xml视图(将其置于线性布局中):

<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/results_list_progress_bar"/>

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/list"
    android:layout_below="@id/results_list_progress_bar"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />

您的列表项视图(将其置于线性布局中):

<ImageView
    android:layout_height="fill_parent"
    android:layout_width="wrap_content"
    android:id="@+id/result_icon"
    android:layout_alignParentBottom="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="6dip"
    android:contentDescription="TODO" />
<TextView
    android:id="@+id/result_title"
    android:layout_width="fill_parent"
    android:layout_height="26dip"
    android:layout_alignParentBottom="true"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@id/result_icon"
    android:ellipsize="marquee"
    android:singleLine="true"
    android:textSize="12sp"
    />
<TextView
    android:id="@+id/result_description"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/result_title"
    android:layout_alignParentBottom="true"
    android:layout_alignParentTop="true"
    android:layout_alignWithParentIfMissing="true"
    android:layout_toRightOf="@id/result_icon"
    android:gravity="center_vertical"
    android:singleLine="true"
    android:textSize="12sp"
    />

答案 1 :(得分:1)

看起来你正在做的是为你的ListView和你的活动夸大相同的布局。这意味着除了您想要的所有其他内容之外,ListView中的每个项目都会有ProgressBarListView。你应该做的是移动这些项目:

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

    <ImageView
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:id="@+id/result_icon"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="6dip"
        android:contentDescription="TODO" />
    <TextView
        android:id="@+id/result_title"
        android:layout_width="fill_parent"
        android:layout_height="26dip"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@id/result_icon"
        android:ellipsize="marquee"
        android:singleLine="true"
        android:textSize="12sp"
        />
    <TextView
        android:id="@+id/result_description"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/result_title"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:layout_alignWithParentIfMissing="true"
        android:layout_toRightOf="@id/result_icon"
        android:gravity="center_vertical"
        android:singleLine="true"
        android:textSize="12sp"
        />
</LinearLayout>

进入新布局,我们称之为listviewlayout.xml。然后,将活动中的代码更改为:

LayoutInflater inflater = (LayoutInflater)context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.listviewlayout, parent, false);

然后你将其他东西保留在你的第一个布局中。