在使用官方的控件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