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效果就出来了


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


技术分享



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。