您的位置:首页 > 移动开发 > Android开发

Android中可以用随意替换指定的View(比如在某个位置展示空页面,无网页面之类的)

2017-03-30 15:20 399 查看
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();


如果你觉得帮到了你,请给作者打赏一口饭吃:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐