在使用官方的控件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>
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));
在逐渐的开发过程中,发现代码的复用越来越重要,对于同样的功能,能够使用帮助类来实现的,尽量用帮助类,降低我们的代码的工作量,以后同样的工作,只要很少的代码就可以实现了,或者同样的模块,也仅仅需要很少的代码,这样的方法,在后期更新的时候,也是只要更新一个模块,就全部都更新了,适合工作中使用。
Android开发:SwipeRefreshLayout无法显示emptyView
原文地址:http://blog.csdn.net/weidongjian/article/details/45030765