1. 程式人生 > >Android中可以用隨意替換指定的View(比如在某個位置展示空頁面,無網頁面之類的)

Android中可以用隨意替換指定的View(比如在某個位置展示空頁面,無網頁面之類的)

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();

如果你覺得幫到了你,請給作者打賞一口飯吃: