如何显示空视图,可能是文本说没有数据..如果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之间有什么不同?何时使用哪一个。
答案 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);
}
如果您的适配器数据为零,那么它将显示空状态,如果您的适配器有一些数据,它将显示这些数据。