用于清空Listview适配器的Android Java ViewStub

时间:2014-12-09 00:16:38

标签: java android xml listview android-listview

我正在尝试在适配器listview为空时显示empty.xml布局。 我试过http://cyrilmottier.com/2011/06/20/listview-tips-tricks-1-handle-emptiness/ 但我无法做到。

empty.xml

<LinearLayout 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"
android:orientation="vertical"
tools:context=".Principal"
>

<ListView
    android:id="@+id/listview_items"
    tools:listitem="@layout/item_list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:dividerHeight="1px"
    android:divider="#ebebeb"
    android:scrollbarStyle="insideOverlay"
    >
</ListView>

<ViewStub
    android:id="@+id/stub_import"
    android:layout="@layout/empty"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom" />
</LinearLayout>

main.xml中

<LinearLayout 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"
android:orientation="vertical"
tools:context=".Principal"
>

<ListView
    android:id="@+id/listview_items"
    tools:listitem="@layout/item_list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:dividerHeight="1px"
    android:divider="#ebebeb"
    android:scrollbarStyle="insideOverlay"
    >
</ListView>

<ViewStub
    android:id="@+id/stub_import"
    android:layout="@layout/empty"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom" />
</LinearLayout>

我知道充气和放气的命令是什么。

   ((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
   // or
   View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

当我的列表视图为空时,我应该在哪里放置命令?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我个人在onCreateonResume中执行此操作,首先使用listview的 adapter.getCount()方法检查我的列表视图是否为空,以检查适配器为空,然后我给 viewStub 充气。

我的代码如下所示:

if(adapter.getCount()==0){
        ViewStub stub=(ViewStub) viewRoot.findViewById(R.id.viewstub);
        stub.inflate();
    }

我的XML文件看起来像

<LinearLayout 
    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="com.younickacademy.younickmobile.Fragment_AlertsList"
    android:orientation="vertical">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

         <ListView
            android:id="@+id/listview_alerts"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"></ListView>
         <ViewStub
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout="@layout/empty_alert_list"
            android:id="@+id/viewstub"/>

    </FrameLayout>

    <Button
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="bottom|right"
        android:layout_margin="10dp"
        android:id="@+id/btn_new_alert"
        android:elevation="6dp"
        android:gravity="center"
        android:text="+"
        android:textColor="@color/textColorPrimary"
        android:background="@drawable/circular_button_selector"/>
</LinearLayout>

我的 empty_alert_list.xml 布局如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:text="No Emergency Alerts have been received Yet."
    android:textStyle="bold"
    android:gravity="center_horizontal"
    />

</RelativeLayout>

然而,这可能不是最好的实现,但确实会立即解决我的问题,直到找到更好的黑客。