如何在片段上处理空listView

时间:2014-07-21 06:45:10

标签: android android-fragments android-listview android-listfragment

如何显示空视图,可能是文本说没有数据..如果String数组为空

public class SermonsFragment extends ListFragment {
    private String[] sermonsList = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //ListView for the sermon list
        ListAdapter listAdapter = new ArrayAdapter<String>
             (getActivity(), android.R.layout.simple_list_item_1, sermonsList);
        setListAdapter(listAdapter);

        //Some people use this but I can't use this syntax somehow
        //SetEmptyView();


    }

这是我的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"
    android:orientation="vertical"
    android:background="#222222" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <!-- Shows an image from your drawable resources -->
        <ImageView
            android:id="@+id/series_banner"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:src="@drawable/series_banner" />
        <!-- Closing tag for the horizontal nested layout -->

        <View
            android:layout_width="fill_parent"
            android:layout_height="10dp"
            android:layout_marginBottom="10dp"
            android:background="@android:color/darker_gray"/>

        <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#ffffffff" />

        <TextView
            android:id="@android:id/empty"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="No Data" />

    </LinearLayout>


</RelativeLayout>

我看到有些人使用setEmptyView,但它对我不起作用,我相信由于使用了ListAdapter。

这让我想到另一个迷你问题,ListView和ListAdapter,ArrayAdapter之间有什么不同?何时使用哪一个。

4 个答案:

答案 0 :(得分:2)

当您使用ListAdapter作为变量的类型时,您真的对界面感兴趣。您可能对调用ArrayAdapter<String>ListAdapter中未提供的某些特定方法感兴趣。这主要是因为您只需将适配器指定为视图的列表适配器。

如果您确实需要调用某些特定方法,则可以使用ArrayAdapter<String>的精确类型。

ArrayAdapter是一个可以处理数据数组的类。您只需要覆盖getView()方法

Listadapter是由具体适配器类实现的接口。

这完全取决于您的使用案例。

答案 1 :(得分:2)

如果您无法使用setEmptyView,请创建包含空消息的布局。例如:

<TextView
    android:text="No results found"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/EmptytextView"
    android:visibility="Gone"/>

然后检查你的适配器数量:

if(listadapter.getCount() == 0)
    emptytextview.setVisibility(View.Visible);

答案 2 :(得分:0)

我的案子中的问题实际上是因为我没有检查

if(listAdapter.getCount() == 0)

导致setListAdapter(listAdapter)错误。

我不需要做任何其他事情,之后它会自动显示

    <TextView
        android:id="@android:id/empty"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="No Data" />

无需做任何其他事情。

答案 3 :(得分:0)

假设您的xml文件类似于

<?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" >

<view
    android:id="@+id/recycler_view"
    class="android.support.v7.widget.RecyclerView"
    android:layout_width="match_parent"
    android:clipToPadding="false"
    android:layout_height="match_parent"
    android:layout_centerInParent="true" />

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/empty_state_favorites_container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="vertical"
    android:visibility="gone">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/ic_star_black_124dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/title_for_empty_view_favorites"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/empty_view_text_color" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/text_for_empty_view_favorites"
        android:textColor="@color/empty_view_text_color" />

</LinearLayout>

现在在片段类中,你必须设置一些条件。喜欢

    if (adapter.getItemCount()==0){
        recyclerView.setVisibility(View.INVISIBLE);
        linearLayout.setVisibility(View.VISIBLE);
    }
    else {
        recyclerView.setVisibility(View.VISIBLE);
        linearLayout.setVisibility(View.INVISIBLE);
    }

如果您的适配器数据为零,那么它将显示空状态,如果您的适配器有一些数据,它将显示这些数据。