Android: set empty view to a list view

前端 未结 5 487
情深已故
情深已故 2020-12-28 17:36
 

        
相关标签:
5条回答
  • 2020-12-28 17:54

    There are some correct answers, however, I think this is the best approach I've found:

    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);
    
    0 讨论(0)
  • 2020-12-28 17:56

    if you are using ListActivity then no need to set the empty view manually. Remove list.setEmptyView(findViewById(android.R.id.empty)); from your code.

    Change your layout like below then it's automatically add EmptyView if list has no item:

    <?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>
    
    0 讨论(0)
  • 2020-12-28 17:58

    You have to set the empty view before setting the adapter, if your MainActivity is not extending ListActivity.

    Try this

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

    Sorry for the late answer!

    Alternate method: Make your activity extend from ListActivity. And add a textview to your list layout with id android.R.id.empty

    0 讨论(0)
  • 2020-12-28 18:04

    Try this

        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);
    
    0 讨论(0)
  • 2020-12-28 18:13

    Whatever @dhawalSodhaParmar has explained is correct. But there is a confusion when you look at the way the answer is put down.

        <?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>
    

    Suppose if you already have a list view and adapter backing the same with data. And assuming everything is working fine, whoever wants to implement this empty list view screen has to start like below: Step 1: Modify the existing Activity XML file which has the list view with the one I have used here. You can use either a Linear Layout or Relative Layout, but preferably Relative because of the flexibility. And a textView like I have written.

    Step 2: Go to your Activity Java file, and after your 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));
    

    That's it, now run and you are set!

    0 讨论(0)
提交回复
热议问题