我正在尝试在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="<< 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>
它没有效果,我做了调试,如果没有将列表设置为空,它进入部分,列表继续出现!我不明白为什么,感谢你的帮助。
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");
}
提前致谢。
答案 0 :(得分:23)
使用RelativeLayout
首先添加空列表视图
添加listView(emptyList必须在listview后面)
如果您从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可见性可见,第二个是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="<< 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);
}
希望它会有用。
答案 1 :(得分:16)
在带有示例
的代码段下方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);
答案 2 :(得分:2)
在设置空视图之前,您不必进行空检查。只需将emptyview设置为ListView即可。当适配器以零内容传递时,列表视图将显示空视图。
lv.setEmptyView(emptyList);
emptyList.setText("No Projects Found");
答案 3 :(得分:1)
您是否在setEmptyView(View)
之前致电setAdapter(ListAdapter)
?
我认为这些操作的顺序很重要(必须首先调用setEmptyView
),并且必须为要显示的空视图设置适配器。
答案 4 :(得分:0)
调用setEmptyView不会使列表为空。如果适配器为空,它会设置ListView显示的视图。 因此,在setEmptyView之后,您必须设置没有项目的Adapter。
答案 5 :(得分:-1)
如果你的布局有一个ListView,下面是一个RelativeLayout,带有GraphicsButtons for Icons等删除等,那么我使用的方法是让ListView占用除屏幕底部以外的所有内容(就像我一样)从这个网站发现)将其高度设置为0px,权重为1加上其他Views / RelativeLayouts没有权重。一切都很好,直到你第一次显示一个空的ListView,之后它再也不会出现,因为即使它后面有物品,它的高度也是在它的第一次出现时设置的。
我展示了一些代码(不包括布局),用于让血腥的东西工作......
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();