Android开发:SwipeRefreshLayout无法显示emptyView

在使用官方的控件SwipeRefreshLayout,发现原先的emptyView消失了,在网上搜索了许多资料,没有匹配我的答案,因为我的emptyView是用一个帮助类来实现的,后来百经挫折,终于找到了一个完美的方法了,介绍如下:

首先,更改xml的布局,在外面增加一层Framelayout,改善后的XML布局如下:

<FrameLayout
        android:id="@+id/parent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        >

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipe_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
                android:id="@+id/empty_textview"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="empty_textview"
                android:textSize="25sp"
                />

            <ListView
                android:id="@+id/listview"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/white"
                android:scrollbarStyle="outsideOverlay" />

    </android.support.v4.widget.SwipeRefreshLayout>
    </FrameLayout>

这样做的原因,是因为swipelayout是viewgroup,无法直接addView,或者说可以吧,但是addView是没有效果的,于是在外面嵌套一个FrameLayout,用这个layout来add emptyView,下面是emptyView的帮助类

public class EmptyViewHelper {
	private ListView mListView;
	private View emptyView;
	private Context mContext;
	private String mEmptyText;
	private TextView mTextView;
	private FrameLayout parent;

	public EmptyViewHelper(ListView listView, String text) {
		mListView = listView;
		mContext = listView.getContext();
		mEmptyText = text;
		initEmptyView();
	}

	public EmptyViewHelper(ListView listView, String text, FrameLayout parent) {
		mListView = listView;
		mContext = listView.getContext();
		mEmptyText = text;
		this.parent = parent;
		initEmptyView();
	}

	private void initEmptyView() {
		emptyView = View.inflate(mContext, R.layout.empty_view, null);

		LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL);

		parent.addView(emptyView, lp);

		mListView.setEmptyView(emptyView);
		if (!TextUtils.isEmpty(mEmptyText)) {
			((TextView) emptyView.findViewById(R.id.textview))
					.setText(mEmptyText);
		}
	}

}

这样的话,对于需要增加emptyView的listview,直接使用如下的代码,既可以实现了

EmptyViewHelper emptyViewHelper = new EmptyViewHelper(mListview, "正在加载", (FrameLayout)v.findViewById(R.id.parent));

这样,listview就的emptyView效果就出来了

在逐渐的开发过程中,发现代码的复用越来越重要,对于同样的功能,能够使用帮助类来实现的,尽量用帮助类,降低我们的代码的工作量,以后同样的工作,只要很少的代码就可以实现了,或者同样的模块,也仅仅需要很少的代码,这样的方法,在后期更新的时候,也是只要更新一个模块,就全部都更新了,适合工作中使用。

时间: 2024-10-13 23:54:59

Android开发:SwipeRefreshLayout无法显示emptyView的相关文章

Android开发之即时显示Toast

Android开发中,Toast经常被用到,但如果想连续弹出Toast,总是要等到第一个Toast显示完才能开始显示第二个Toast,不能及时的反馈给用户信息,没有良好的用户体验, 因此可以用代码实现在弹出下一个Toast之前,将上一个Toast关闭,来显示正确的信息,代码如下: 1.先写一个Toast的成员变量 Toast toast; 2.在onCreate中初始化一个Toast的实例 toastShow("",Toast.LENGTH_LONG,this); 3.需要自定义一个方

.Net程序员玩转Android开发---(12)ListView显示数据

Android中显示数据有多种控件,这节我们来认识下ListView,ListView是Android中最常用的数据显示控件,可以显示简单数据源,也可以显示复杂数据源,我们在Android系统中常看到的列表项,基本都是ListView的功劳.ListView中显示数据,肯定要绑定数据源.数据源的绑定是通过Adapter来完成的,Android中有两种常用的适配器,ArrayAdapter(数组适配器)  SimpleAdapter(简单适配器),适配器的作用就是把复杂的数据源显示到istview

Android开发:ListView添加EmptyView的帮助类

在项目开发过程中,会碰到许许多多的ListView,古老的方法就是每碰到一个ListView,就在xml文件里面写上emptyView,然后添加emptyView,其实在很多时候,不同ListView的emptyView是一样的,对此,写一个简单的帮助类,在ListView需要增加emptyView的时候,只要添加一行代码就可以实现了 帮助类的名称叫EmptyViewHelper,代码如下: public class EmptyViewHelper { private ListView mLis

android开发 实现同时显示png/jpg 等bitmap图片还可以显示gif图片,有效防止OOM

本来使用第三方jar包 GifView.jar  发现使用的时候不能显示png图片,而且多次setgifimage的时候还会OOM: 现在使用了一个新的第三方,demo是别人的, 下载链接:http://files.cnblogs.com/files/feijian/drawable_gif_demo.rar 注意里面需要添加的包

Android开发学习笔记-显示对话框

private void ShowUpdateDialog() { Log.i("version", "shengji"); AlertDialog.Builder dialog = new Builder(this); dialog.setTitle("提醒升级"); dialog.setMessage("是否进行升级?"); dialog.setPositiveButton("立刻升级", new On

Android开发问题之布局(layout)文件图形界面不能显示

问题解析:Android工程中Layout文件夹下的布局文件图形界面无法显示,一般发生这种情况在导入工程操作后极易出现,因为可能eclipse使用的sdk版本不同,target类型不同,所用Android自带的库文件也不同,从而导致布局文件不能正常显示图形界面,只能显示代码编辑界面.解决方法:1.右击Android工程名称,选择最后一项“属性”,在弹出框中找到“java构建路径”,然后在右边方框选择“库”标签.在“库”标签下找到Android工程的库(例如Android 4.0.3),选中“移除

怪胎:Android开发ImageView图片无法显示

今天碰到一个非常奇怪的问题: 在Android中ImageView无法显示加载的本地SDCard图片. 具体过程是:先调用本地照相机程序摄像,然后将拍摄的图片加载在ImageView中显示. [java] view plaincopyprint? public class ActiEnvi extends Activity   { static final String TAG = "ActiEnvi"; private static final int REQ_CODE_CAMERA

(转)解决android开发人员,手机app图标显示不正确问题

android程序更换图标安装后不变解决办法 最近在搞android的时候发现,一开始程序使用系统默认图标,等到应用发布的时候要更换图标,结果在测试机上图标就是不变,其他手机和模拟器上都更新了图标. 测试机是小米,据说这个问题只在小米上会出现.网上查了原因说是miui会缓存图标,并且提供了两个解决方法 1.进入目录  /data/system/customized_icons 下,找到你原来的旧图标,删除即可.需要root权限 2.把当前的工程换一个包名,重新安装即可.换了包名等于是一个新的应用

百度地图开发定位与显示Demo(Android)

百度地图给我们提供了非常丰富的API供我们进行二次开发.百度地图的SDK与定位SDK在今年6月份进行了更新.地图更新为3.0,定位更新为4.2.百度说:这次更新对接口有了较大部分的调整,与之前版本不兼容.本篇博文基于以上最新版本的API提供一个小例子:获取自己当前的经纬度坐标,并且显示在地图上.这里只给出核心代码,其他KEY的引入,地图控件的添加,权限的声明,定位服务的声明可在百度地图API官网(http://developer.baidu.com/map/sdkandev-download.h