17
 <TextView
            android:id="@android:id/empty"
            style="@style/FacebookFont"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="@string/no_result_found"
            android:textColor="@color/white" />

这是空视图的 xml 代码。我设置空视图如下:

    list.setAdapter(adapter);
    list.setEmptyView(findViewById(android.R.id.empty));

即使在填充列表视图之前,我也有列表视图中的项目,显示空视图。当列表视图包含某些项目时,我不希望显示该空视图。

请帮忙。

4

6 回答 6

15

如果您正在使用,ListActivity则无需手动设置空视图。list.setEmptyView(findViewById(android.R.id.empty));从您的代码中删除。

更改您的布局,如下所示,EmptyView如果列表没有项目,它会自动添加:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="8dp"
        android:paddingRight="8dp">

    <ListView android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#00FF00"
            android:layout_weight="1"
            android:drawSelectorOnTop="false"/>

     <TextView android:id="@android:id/empty"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FF0000"
            android:text="No data"/>

</LinearLayout>
于 2013-04-11T13:26:59.580 回答
11

如果您MainActivity没有扩展,则必须在设置适配器之前设置空视图ListActivity

尝试这个

list.setEmptyView(findViewById(android.R.id.empty));
list.setAdapter(adapter);

抱歉回复晚了!

替代方法:使您的活动从 ListActivity 扩展。textview并使用 id添加到您的列表布局android.R.id.empty

于 2013-09-27T06:24:47.957 回答
5

有一些正确的答案,但是,我认为这是我找到的最好的方法:

View emptyView = getLayoutInflater().inflate(R.layout.empty_list_cart, null);
addContentView(emptyView, listView.getLayoutParams()); // You're using the same params as listView
listView.setEmptyView(emptyView);
listView.setAdapter(adapter);
于 2014-04-23T21:10:18.933 回答
5

尝试这个

    View view = getLayoutInflater() .inflate(<resource id of the empty view>, null);
    ViewGroup viewGroup= ( ViewGroup)list.getParent();
    viewGroup.addView(view);
    list.setEmptyView(view); 
    list.setAdapter(adapter);
于 2014-02-14T16:27:04.690 回答
0

无论@dhawalSodhaParmar 解释什么都是正确的。但是,当您查看答案的方式时会感到困惑。

    <?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SampleActivity">

    <ListView
        android:id="@+id/list"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:divider="@null"
        android:dividerHeight="0dp" />

    <!-- Empty view is only visible when the list has no items. -->
    <TextView
        android:id="@+id/empty_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="NO DOCUMENTS AVAILABLE!"
        android:textColor="#525252"
        android:textAppearance="?android:textAppearanceMedium"
        android:visibility="gone"/>

</RelativeLayout>

假设您已经有一个列表视图和适配器支持相同的数据。假设一切正常,任何想要实现这个空列表视图屏幕的人都必须像下面这样开始: 第 1 步:使用我在这里使用的列表视图修改现有的 Activity XML 文件。您可以使用线性布局或相对布局,但最好使用相对布局,因为它具有灵活性。还有一个像我写过的 textView。

第 2 步:转到您的 Activity Java 文件,并在您的 setContentView 之后

ListView emptyListView = (ListView) findViewById(R.id.list);
// set your adapter here
// set your click listener here
// or whatever else
emptyListView.setEmptyView(findViewById(R.id.empty_text_view));

就是这样,现在运行,你准备好了!

于 2017-08-02T10:26:33.293 回答
0
// first of all create a global variable of Text view 
// which is displayed when the list is empty

private TextView mEmptyStateTextView;
    
//then in onCreate(Bundle savedInstanceState)
/Setting empty text view

mEmptyStateTextView=(TextView) findViewById(R.id.emptyview);

view.setEmptyView(mEmptyStateTextView);  

//then in onLoadfinished method

mEmptyStateTextView.setText(R.string.no_earthquakes);
于 2021-01-03T15:18:20.373 回答