Android中要在某个地方展示空页面,或者无网页面,开发者一般都是直接覆盖个页面上去,在需要的时候显示,不需要隐藏。这样就扰乱了代码的逻辑性。今天写了个小工具,可以随意指定在某个View上展示空页面。代码很简单,如下,相信很快就能看明白:
public class ReplaceViewHelper {
private View mTargetView;
private View mReplaceView = null;
private Context mContext;
private ReplaceViewHelper() {
}
public ReplaceViewHelper(Context context) {
mContext = context;
}
/**
* 用来替换某个View,比如你可以用一个空页面去替换某个View
*
* @param targetView 被替换的那个View
* @param replaceViewResId 要替换进去的布局LayoutId
* @return
*/
public ReplaceViewHelper toReplaceView(View targetView, final int replaceViewResId) {
toReplaceView(targetView, View.inflate(mContext, replaceViewResId, null));
return this;
}
/**
* 用来替换某个View,比如你可以用一个空页面去替换某个View
*
* @param targetView 被替换的那个View
* @param replaceView 要替换进去的那个View
* @return
*/
public ReplaceViewHelper toReplaceView(View targetView, final View replaceView) {
mTargetView = targetView;
if (mTargetView == null) {
return this;
} else if (!(mTargetView.getParent() instanceof ViewGroup)) {
return this;
}
ViewGroup parentViewGroup = (ViewGroup) mTargetView.getParent();
int index = parentViewGroup.indexOfChild(mTargetView);
if (mReplaceView != null) {
parentViewGroup.removeView(mReplaceView);
}
mReplaceView = replaceView;
mReplaceView.setLayoutParams(mTargetView.getLayoutParams());
parentViewGroup.addView(mReplaceView, index);
//RelativeLayout时别的View可能会依赖这个View的位置,所以不能GONE
if (parentViewGroup instanceof RelativeLayout) {
mTargetView.setVisibility(View.INVISIBLE);
} else {
mTargetView.setVisibility(View.GONE);
}
return this;
}
/**
* 移除你替换进来的View
*/
public final ReplaceViewHelper removeView() {
if (mReplaceView != null && mTargetView != null) {
if (mTargetView.getParent() instanceof ViewGroup) {
ViewGroup parentViewGroup = (ViewGroup) mTargetView.getParent();
parentViewGroup.removeView(mReplaceView);
mReplaceView = null;
mTargetView.setVisibility(View.VISIBLE);
}
}
return this;
}
/**
* @return 返回你替换进来的View
*/
public final View getView() {
return mReplaceView;
}
}
使用方法:
//初始化: private ReplaceViewHelper mReplaceViewHelper; mReplaceViewHelper = new ReplaceViewHelper(this); //替换: mReplaceViewHelper.toReplaceView(mListView, R.layout.ff_empty_layout); //移除: mReplaceViewHelper.removeView();
如果你觉得帮到了你,请给作者打赏一口饭吃: