码迷,mamicode.com
首页 > 移动开发 > 详细

Android开发:SwipeRefreshLayout无法显示emptyView

时间:2015-04-13 23:04:23      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:android开发   android   

在使用官方的控件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效果就出来了


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


技术分享



Android开发:SwipeRefreshLayout无法显示emptyView

标签:android开发   android   

原文地址:http://blog.csdn.net/weidongjian/article/details/45030765

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!