3

当 listView 为空时,我试图设置空视图。这是我的完整 XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/fondgris"
    android:orientation="vertical" >

    <!-- Header  Starts -->

    <RelativeLayout
        android:id="@+id/head"
        android:layout_width="fill_parent"
        android:layout_height="35sp"
        android:background="@layout/header_gradient"
        android:paddingBottom="5dip"
        android:paddingTop="5dip" >

        <TextView
            android:id="@+id/activity"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:layout_alignParentLeft="true"
            android:layout_centerInParent="true"
            android:layout_marginLeft="5dp"
            android:gravity="center_vertical"
            android:scaleType="center"
            android:text="List of projects"
            android:textColor="#ffffff"
            android:textSize="13sp"
            android:textStyle="bold"
            android:tint="#0E5EC7" />

        <ImageButton
            android:id="@+id/logout"
            android:layout_width="30dp"
            android:layout_height="35dp "
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="0dp"
            android:background="@android:color/transparent"
            android:onClick="logout"
            android:scaleType="center"
            android:src="@drawable/sortie"
            android:tint="#FFFFFF" >
        </ImageButton>

        <ImageButton
            android:id="@+id/home"
            android:layout_width="35dp"
            android:layout_height="35dp "
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@id/logout"
            android:background="@android:color/transparent"
            android:onClick="home"
            android:scaleType="center"
            android:src="@drawable/home" >
        </ImageButton>

        <ImageButton
            android:id="@+id/back"
            android:layout_width="wrap_content"
            android:layout_height="35dp "
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@id/home"
            android:background="@android:color/transparent"
            android:onClick="back"
            android:scaleType="center"
            android:src="@drawable/back"
            android:tint="#FFFFFF" >
        </ImageButton>
    </RelativeLayout>
    <!-- Editext and ImageView for Search -->

    <RelativeLayout
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/inputSearch"
            android:layout_width="150dp"
            android:layout_height="35dp"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/bnSearch"
            android:hint="Search..."
            android:inputType="textVisiblePassword"
            android:textSize="12sp" />

        <ImageButton
            android:id="@+id/bnSearch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/inputSearch"
            android:layout_centerInParent="true"
            android:layout_toLeftOf="@+id/bnClear"
            android:background="@android:color/transparent"
            android:src="@drawable/search" />

        <ImageButton
            android:id="@+id/bnClear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/inputSearch"
            android:layout_centerInParent="true"
            android:layout_marginRight="3dip"
            android:background="@android:color/transparent"
            android:onClick="ClearSearch"
            android:src="@drawable/cancel" />

        <Button
            android:id="@+id/imageButtonAddProject"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_centerInParent="true"
            android:drawableLeft="@drawable/add"
            android:onClick="addProject"
            android:text=" Add Project"
            android:textColor="@color/text_color"
            android:textSize="12sp" />
    </RelativeLayout>

    <!-- List View -->

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="337dp"
        android:layout_weight="0.74" >
    </ListView>

    <TextView
        android:id="@+id/emptyList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:text="Liste vide "
        android:textSize="12sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.04"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/bnPrevious"
            android:layout_width="80dp"
            android:layout_height="35dp"
            android:layout_marginLeft="30dp"
            android:background="@android:color/transparent"
            android:text="&lt;&lt; Prev"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/page"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Page"
            android:textSize="12sp" />

        <EditText
            android:id="@+id/editpage"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/of"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="of "
            android:textSize="12sp" />

        <TextView
            android:id="@+id/nbpage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp" />

        <Button
            android:id="@+id/bnNext"
            android:layout_width="80dp"
            android:layout_height="35dp"
            android:layout_marginRight="30dp"
            android:background="@android:color/transparent"
            android:text="Next >>"
            android:textSize="12sp" />
    </LinearLayout>

</LinearLayout>

它没有效果,我做了调试,它进入了if部分但没有将列表设置为空,列表继续出现!我不明白为什么,感谢您的帮助。

final ProjectContainer container = gson.fromJson(resultat,
                    ProjectContainer.class);
            final ListView lv = (ListView) findViewById(R.id.list);
            TextView emptyList = (TextView) findViewById(R.id.emptyList);
            // if list empty
            if (container == null) {
                lv.setEmptyView(emptyList);
                emptyList.setText("No Projects Found");

            }

提前致谢。

4

6 回答 6

23
  1. 使用相对布局

  2. 首先添加您的 emptyList 视图

  3. 添加你的listView(emptyList必须在listview的后面)

  4. 如果您从 json 中获得 0 个项目,请将 listView 的可见性设置为 View.INVISIBLE。

编辑:

好的,您需要稍微更改一下您的 XML。

将 emptyList 和 list 包含在 RelativeLayout 中,如下所示。

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    >

    <TextView
        android:id="@+id/emptyList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="There is no item"
        android:textSize="25sp" />

    <ListView
        android:id="@+id/list" android:background="@android:color/white"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </ListView>

</RelativeLayout>

要显示空文本,请将 listView 可见性设置为 GONE。这是我这边的示例输出。第一个是 listView 可见性 Visible,第二个是 listview 可见性 GONE

如果您的完整更新的 xml 代码在这里。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/fondgris"
    android:orientation="vertical" >

    <!-- Header  Starts -->

    <RelativeLayout
        android:id="@+id/head"
        android:layout_width="fill_parent"
        android:layout_height="35sp"
        android:background="@layout/header_gradient"
        android:paddingBottom="5dip"
        android:paddingTop="5dip" >

        <TextView
            android:id="@+id/activity"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:layout_alignParentLeft="true"
            android:layout_centerInParent="true"
            android:layout_marginLeft="5dp"
            android:gravity="center_vertical"
            android:scaleType="center"
            android:text="List of projects"
            android:textColor="#ffffff"
            android:textSize="13sp"
            android:textStyle="bold"
            android:tint="#0E5EC7" />

        <ImageButton
            android:id="@+id/logout"
            android:layout_width="30dp"
            android:layout_height="35dp "
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="0dp"
            android:background="@android:color/transparent"
            android:onClick="logout"
            android:scaleType="center"
            android:src="@drawable/sortie"
            android:tint="#FFFFFF" >
        </ImageButton>

        <ImageButton
            android:id="@+id/home"
            android:layout_width="35dp"
            android:layout_height="35dp "
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@id/logout"
            android:background="@android:color/transparent"
            android:onClick="home"
            android:scaleType="center"
            android:src="@drawable/home" >
        </ImageButton>

        <ImageButton
            android:id="@+id/back"
            android:layout_width="wrap_content"
            android:layout_height="35dp "
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@id/home"
            android:background="@android:color/transparent"
            android:onClick="back"
            android:scaleType="center"
            android:src="@drawable/back"
            android:tint="#FFFFFF" >
        </ImageButton>
    </RelativeLayout>
    <!-- Editext and ImageView for Search -->

    <RelativeLayout
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/inputSearch"
            android:layout_width="150dp"
            android:layout_height="35dp"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/bnSearch"
            android:hint="Search..."
            android:inputType="textVisiblePassword"
            android:textSize="12sp" />

        <ImageButton
            android:id="@+id/bnSearch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/inputSearch"
            android:layout_centerInParent="true"
            android:layout_toLeftOf="@+id/bnClear"
            android:background="@android:color/transparent"
            android:src="@drawable/search" />

        <ImageButton
            android:id="@+id/bnClear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/inputSearch"
            android:layout_centerInParent="true"
            android:layout_marginRight="3dip"
            android:background="@android:color/transparent"
            android:onClick="ClearSearch"
            android:src="@drawable/cancel" />

        <Button
            android:id="@+id/imageButtonAddProject"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_centerInParent="true"
            android:drawableLeft="@drawable/add"
            android:onClick="addProject"
            android:text=" Add Project"
            android:textColor="@color/text_color"
            android:textSize="12sp" />
    </RelativeLayout>

    <!-- List View -->

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="337dp"
        android:layout_gravity="center"
        android:layout_weight="0.74" >

        <TextView
            android:id="@+id/emptyList"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="There is no item"
            android:textSize="25sp" />

        <ListView
            android:id="@+id/list" android:background="@android:color/white"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >
        </ListView>

    </RelativeLayout>
   <!-- end of listview -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.04"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/bnPrevious"
            android:layout_width="80dp"
            android:layout_height="35dp"
            android:layout_marginLeft="30dp"
            android:background="@android:color/transparent"
            android:text="&lt;&lt; Prev"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/page"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Page"
            android:textSize="12sp" />

        <EditText
            android:id="@+id/editpage"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/of"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="of "
            android:textSize="12sp" />

        <TextView
            android:id="@+id/nbpage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="12sp" />

        <Button
            android:id="@+id/bnNext"
            android:layout_width="80dp"
            android:layout_height="35dp"
            android:layout_marginRight="30dp"
            android:background="@android:color/transparent"
            android:text="Next >>"
            android:textSize="12sp" />
    </LinearLayout>

</LinearLayout>

并在代码中。

if (container == null) {
         lv.setVisibility(View.INVISIBLE);
}

希望它会有用。

于 2013-05-31T17:10:08.433 回答
17

下面是一个带有示例的片段

TextView emptyList = new TextView(getContext());
emptyList.setText("The list is empty");

ListView mListView = (ListView) findViewById(R.id.list_view);
((ViewGroup)mListView.getParent()).addView(emptyList);
mListView.setEmptyView(emptyList);
mListView.setAdapter(adapter);
于 2013-08-29T07:18:36.290 回答
2

在设置空视图之前,您不必进行空检查。只需将空视图设置为 ListView。当适配器以零内容传递时,列表视图将负责显示空视图。

            lv.setEmptyView(emptyList);
            emptyList.setText("No Projects Found");
于 2013-05-31T17:01:37.937 回答
1

setEmptyView(View)以前打过电话setAdapter(ListAdapter)吗?

我认为这些操作的顺序很重要(setEmptyView必须首先调用),并且必须设置一个适配器才能显示空视图。

于 2013-05-31T17:28:44.520 回答
-1

调用 setEmptyView 不会使您的列表为空。它设置了一个视图,如果它的适配器为空,ListView 将显示该视图。因此,在 setEmptyView 之后,您必须设置其中没有项目的 Adapter。

于 2013-05-31T17:41:46.513 回答
-1

当你有一个布局,它有一个 ListView,在它下面有一个带有 GraphicsButtons 的 RelativeLayout,用于图标,如删除等,那么我用来让 ListView 占据除屏幕底部之外的所有内容的方法是(正如我从这个站点)将其高度设置为 0px 和权重 1 加上其他 Views/RelativeLayouts 没有权重。一切都很好,直到您第一次显示一个空的 ListView 之后它不会再次出现,因为即使它稍后包含项目,它的高度也是在第一次出现时设置的。

我展示了一些我用来让该死的东西工作的代码(不包括布局)......</p>

public void listFiles() {
    boolean mEmptyList;
    mFileNames = mFile.list();
    mFileCount = (mFileNames == null) ? 0 : mFileNames.length;
    mEmptyList = (mFileCount == 0);
    mFileChecked = mEmptyList ? null : new boolean[mFileCount];
    View mEmpty;
    if ((mEmpty = mListView.getEmptyView()) != null) {
        if (mEmpty.getVisibility() != ( mEmptyList ? View.VISIBLE : View.GONE )) {
            mEmpty.setVisibility( mEmptyList ? View.VISIBLE : View.GONE );
            if (mFileCount > 0)
                mListView.setMinimumHeight(((ViewGroup) mListView.getParent()).getHeight());
            mListView.setVisibility( mEmptyList ? View.GONE : View.VISIBLE );
        }
    }
}

如果这不在适配器的构造函数中,则必须调用

mListView.invalidateViews();
于 2015-03-04T00:37:42.373 回答