getLayoutParams返回null

本文讨论了在Android应用中使用下拉刷新组件时遇到的问题,特别是当组件返回null的情况。通过添加viewgroup并调用addView方法,成功解决了初始化问题。详细解释了布局配置、LayoutParams设置以及解决方案实现过程。
header = LayoutInflater.from(context).inflate(R.layout.pull_to_refresh,null,true);
headerLayoutParams = (MarginLayoutParams) header.getLayoutParams();

我在做下拉刷新时,直接给我返回null。

后来发现他必须有viewgroup,然后addView(header, 0);了一下,这样就好了


package com.ethanhua.skeleton; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * Created by ethanhua on 2017/8/2. */ public class ViewReplacer { private static final String TAG = ViewReplacer.class.getName(); private final View mSourceView; private View mTargetView; private int mTargetViewResID = -1; private View mCurrentView; private ViewGroup mSourceParentView; private final ViewGroup.LayoutParams mSourceViewLayoutParams; private int mSourceViewIndexInParent = 0; private final int mSourceViewId; public ViewReplacer(View sourceView) { mSourceView = sourceView; mSourceViewLayoutParams = mSourceView.getLayoutParams(); mCurrentView = mSourceView; mSourceViewId = mSourceView.getId(); } public void replace(int targetViewResID) { if (mTargetViewResID == targetViewResID) { return; } if (init()) { mTargetViewResID = targetViewResID; replace(LayoutInflater.from(mSourceView.getContext()).inflate(mTargetViewResID, mSourceParentView, false)); } } public void replace(View targetView) { if (mCurrentView == targetView) { return; } if (targetView.getParent() != null) { ((ViewGroup) targetView.getParent()).removeView(targetView); } if (init()) { mTargetView = targetView; mSourceParentView.removeView(mCurrentView); mTargetView.setId(mSourceViewId); mSourceParentView.addView(mTargetView, mSourceViewIndexInParent, mSourceViewLayoutParams); mCurrentView = mTargetView; } } public void restore() { if (mSourceParentView != null) { mSourceParentView.removeView(mCurrentView); mSourceParentView.addView(mSourceView, mSourceViewIndexInParent, mSourceViewLayoutParams); mCurrentView = mSourceView; mTargetView = null; mTargetViewResID = -1; } } public View getSourceView() { return mSourceView; } public View getTargetView() { return mTargetView; } public View getCurrentView() { return mCurrentView; } private boolean init() { if (mSourceParentView == null) { mSourceParentView = (ViewGroup) mSourceView.getParent(); if (mSourceParentView == null) { Log.e(TAG, "the source view have not attach to any view"); return false; } int count = mSourceParentView.getChildCount(); for (int index = 0; index < count; index++) { if (mSourceView == mSourceParentView.getChildAt(index)) { mSourceViewIndexInParent = index; break; } } } return true; } } 逐行解释这个代码
最新发布
09-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值