Android ListView之setEmptyView的问题

使用listView或者gridView时,当列表为空时,有时需要显示一个特殊的empty view来提示用户,一般情况下,如果你是继承ListActivity,只要 
<ListView android:id="@id/android:list".../> 
<TextView android:id="@id/android:empty.../> 
当列表为空时就会自动显示TextView 

但是,如果继承Activity的话,想出现上面的效果,就需要手动 

<ListView android:id="@+id/list" .../> 
<TextView android:id="@+id/empty" .../> 

ListView list= (ListView)findViewById(R.id.mylist); 
TextView tv= (TextView)findViewById(R.id.myempty); 

list.setEmptyView(tv); 

误区: 
setEmptyView(View)这个函数很有误导性,有时可能会在代码中写EmptyView,像下面这样: 

TextView tv= new TextView(this); 
tv.setText("this is a empty view") 
setEmptyView(tv); 
这样是不行的。。。 

但是后来我在老外的网上说下面这样是可行的,注意第4,5行: 

TextView emptyView = new TextView(context);
emptyView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
emptyView.setText(“This appears when the list is empty”);
emptyView.setVisibility(View.GONE);
((ViewGroup)list.getParent()).addView(emptyView);
list.setEmptyView(emptyView);

结果是可行的!

自定义emptyView:

reload_layout.xml

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

    <TextView
    android:id="@+id/loadText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:drawablePadding="10dip"
    android:drawableTop="@drawable/ic_reload"
    android:gravity="center"
    android:text="没有数据,点击屏幕刷新"
    android:textColor="@color/gray_text"
    android:textSize="@dimen/font_normal"
    android:visibility="visible" />
</LinearLayout>

在代码中添加:

View emptyView = LayoutInflater.from(getActivity()).inflate(R.layout.reload_layout, null);
		((ViewGroup)mListView.getParent()).addView(emptyView);
		mListView.setEmptyView(emptyView);

ic_reload.png

时间: 2024-09-14 02:58:39

Android ListView之setEmptyView的问题的相关文章

Android ListView之setEmptyView正确使用方法

Android ListView之setEmptyView正确使用方法 我们知道ListView组件提供了一个空数据是的视图设置方法setEmptyView,该方法存在一个诟病,就是空视图和listview组件要在一个Parent中,这个就不在此细说,下面说另一个问题,原因其实和前面那个问题同出一辙. 假如emptyView和listview在布局中,已经属于同一个parent,设置EmptyView的代码如下 private void setEmptyView(){ emptyTv.setTe

Android ListView常用小技巧汇总_Android

ListView在我们Android项目中的地位是有目共睹的,相信几乎每一个App中都有它的身影. ListView主要是用列表形式来加载数据,在特定情况下需要实现一些特殊功能:如刷新数据,加载数据,实现动画效果等. 作为我们常用的控件,有哪些需要注意的呢? **为ListView的每一Item设置分隔线 第一种方法:也是最简单地方法,在布局文件中设置ListView的 divider属性 如:android:divider="@color/black" 第二种方法:设置android

解决Android ListView数据为空及加载错误的方法_Android

在项目中,都会用到ListView或GridView等列表控件.一般会用来展示从网络请求的数据 .如果请求的数据为空或者在请求的时候正好无没有网络了,我们的界面应该如何展示呢?数据为空的时候,ListView可以使用setEmptyView (View emptyView) 方法来我们需要的统一界面.数据加载失败呢?我们也可以统一进行处理. //下面这个类是简单地封装用于无数据及加载错误的一个页面. public class CommonShowView { private Context mC

Android ListView常用小技巧汇总

ListView在我们Android项目中的地位是有目共睹的,相信几乎每一个App中都有它的身影. ListView主要是用列表形式来加载数据,在特定情况下需要实现一些特殊功能:如刷新数据,加载数据,实现动画效果等. 作为我们常用的控件,有哪些需要注意的呢? **为ListView的每一Item设置分隔线 第一种方法:也是最简单地方法,在布局文件中设置ListView的 divider属性 如:android:divider="@color/black" 第二种方法:设置android

Android ListView滑动过程中图片显示重复错乱闪烁的原因及解决方法

主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制. 1.原因分析 ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存: b. 获取滑入屏幕的行item之前会先判断缓存中是否有可用的ite

Android ListView的一个问题

需要的功能很简单,就是一个带checkbox的列表,提交时需要知道用户选择了那些项目,如下图: 使用SimpleAdapter作为数据适配器,重写SimpleAdapter.ViewBinder的方法,这样用比自定义Adapter要方便点,代码如下 datas定义是private List<Map<String, Object>> datas=null; 其中让Map中保存一项自我引用(my)绑定到checkBox private Map<String, Object>

android listview的headview

问题描述 android listview的headview 用别人的headview,为什么我的headview只显示了一半..是不是哪里设置问题 解决方案 解决了,listview的布局有个地方用了wrap_content,换成match_parent就好了 解决方案二: 明显是布局出了问题,改一下图片的伸缩方式就可以了 解决方案三: 你的布局拿出来看看,可能是高度设置有问题 解决方案四: <?xml version="1.0" encoding="utf-8&qu

Android ListView滑动过程中图片显示重复错位闪烁问题解决

主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制.1.原因分析ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存: b. 获取滑入屏幕的行item之前会先判断缓存中是否有可用的item,

Android ListView滚动到指定的位置_Android

本文介绍的关于ListView移动到指定位置有两种方法,下面话不多说,直接来看示例代码: listview.setSelection(position); listview.smoothScrollToPosition(position); 第一种方法没有滚动效果,直接跳到指定位置,第二种方法是有滚动效果的. 但是,在是用的时候,你会发现第二种方法没有效果,甚至都没有移动,其实这个问题很好解决,只要在新线程里是用就可以了 listview.post(new Runnable() { @Overr