我很想知道何时尝试将其用于回收视图或任何情况都需要膨胀layout.xml
我试图将回收视图与与数据指标对象连接的layout.xml连接。我做了这些步骤。
1(回收视图支架。
public class StepperViewHolder extends RecyclerView.ViewHolder{
public final StepperViewBinding STEPPER_VIEW;
StepperViewHolder(@NonNull StepperViewBinding stepperViewBinding) {
super(stepperViewBinding.getRoot());
STEPPER_VIEW = stepperViewBinding;
}
}
2(onCreateviewHolder
@Override
public StepperViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
StepperViewBinding stepperViewBinding = DataBindingUtil.setContentView(mActivity, R.layout.stepper_view);
return new StepperViewHolder(stepperViewBinding);
}
现在,这个例外正在投掷。
java.lang.illegalstateException:指定的孩子已经有父母。您必须首先在孩子的父母上调用RemoveView((。 at android.view.viewgroup.addviewinner(viewGroup.java:4309( at android.view.viewgroup.addview(viewgroup.java:4145( at android.view.viewgroup.addview(viewgroup.java:4086( at android.support.v7.widget.RecyClerview $ 5.Addview(recyClerview.java:746( 在Android.support.V7.Widget.ChildHelper.Addview(ChildHelper.java:107(
注意当我尝试通过数据框视图也尝试使用与回收视图过程相似的库时,我先前得到了此例外。我通过删除查看父在addView()
方法[库代码]中存在。
在此例外情况下,addView()
方法发生了相同的错误。那么为什么会发生这种情况,如何避免它?
除此之外,我尝试将视图parent删除,然后再将其传递给View Holderer,并且回收视图也有效,并且两种方法onCreateView()
-onBindView()
都被调用,但在移动屏幕上,没有视图可显示!!!这是我遵循的步骤: -
1(
private void checkParentView(StepperViewBinding stepperViewBinding){
if(stepperViewBinding.getRoot().getParent() != null){
((ViewGroup)stepperViewBinding.getRoot().getParent()).removeView(stepperViewBinding.getRoot());
}
}
2(
@Override
public StepperViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
StepperViewBinding stepperViewBinding = DataBindingUtil.setContentView(mActivity, R.layout.stepper_view);
// To avoid IllegalStateException.
// State: The specified child already has a parent. You must call removeView() on the child's parent first.
checkParentView(stepperViewBinding);
return new StepperViewHolder(stepperViewBinding);
}
已解决通过以这种方式创建绑定视图的实例。
StepperViewBinding stepperViewBinding = DataBindingUtil.inflate(LayoutInflater.from(mActivity),
R.layout.stepper_view, parent, false);
我相信您正在使用错误的DataBindingUtil
方法。通过阅读文档,只有在要更改Activity
的内容视图时才能使用setContentView()
,该视图不适用于RecyclerView
。相反,我认为您应该使用inflate()
方法:
@Override
public StepperViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
StepperViewBinding stepperViewBinding = DataBindingUtil.inflate(inflater, R.layout.stepper_view, parent, false);
return new StepperViewHolder(stepperViewBinding);
}