指定的孩子已经有父母,创建回收视图
有人能帮助我我不知道为什么我得到这个错误。指定的孩子已经有父母,创建回收视图
致命异常:主 工艺:com.sangra.igurdwara,PID:24038 java.lang.IllegalStateException:指定的子已具有 父。您必须先调用子对象的父对象的removeView()。 at android.view.ViewGroup.addViewInner(ViewGroup.java:4659) at android.view.ViewGroup.addView(ViewGroup.java:4495) at android.view.ViewGroup.addView(ViewGroup.java:4436) at android.support.v7.widget.RecyclerView $ 5.addView(RecyclerView.java:676) at android.support.v7.widget.ChildHelper.addView(ChildHelper.java:107) at android.support.v7.widget.RecyclerView $ LayoutManager.addViewInt(RecyclerView.java:7399) at android.support.v7.widget.RecyclerView $ LayoutManager.addView(RecyclerView.java:7357) at android.support.v7.widget.RecyclerView $ LayoutManager.addView(RecyclerView .java:7345) at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1459) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1408) at android.support.v7.widget。 LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:580) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3374) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3183) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3627) at android.view.View.layout(View.java:17993) at android.view.ViewGroup.layout(ViewGroup.java: 5817) 在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1742) 在android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1731) 在android.widget.LinearLayout.onLayout(LinearLayout.java:1496) 在android.view.View.layout(View.java:17993) 在android.view.ViewGroup.layout(ViewGroup.java:5817) 在android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) 在机器人。 (android.view.java:17993) at android.view.ViewGroup.layout(ViewGroup.java:5817) at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437) at android.view.View.layout(View.java:17993) at android.view.ViewGroup.layout(ViewGroup.java:5817 ) 在android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) 在android.widget.FrameLayout.onLayout(FrameLayout.java:281) 在android.view.View.layout(View.java:17993) 在android.widget.LineoutLayout.layoutVertical(LinearLayout.java:1585) (android.widget.Linear.Layout.setChildFrame(LinearLayout.java:1742) )在android.view.ViewGroup.layout(ViewGroup.java:5817) 在android.view.View.Group.layout(ViewGroup。)上的android.view.View.layout(View.java:17993) 处的android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 。java:5817) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) at android.widget.FrameLayout.onLayout(FrameLayout.java:281) at com.android.internal.policy.PhoneWindow $ DecorView。 onLayout(PhoneWindow.java:3172) at android.view.View.layout(View.java:17993) at android.view.ViewGroup.layout(ViewGroup.java:5817) at android.view.ViewRootImpl.performLayout( ViewRootImpl.java:2759) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2460) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1528) at android.view.ViewRootImpl $ Trav ersalRunnable.run(ViewRootImpl.java:7524) at android.view.Choreographer $ CallbackRecord.run(Choreographer.java:911) at android.view.Choreographer.doCallbacks(Choreographer.java:686) at android.view。 Chronographer.doFrame(Choreographer.java:622) at android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:897) at android.os.Handler.handleCallback(Handler.java:739) at android.os。 Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:7325) at java.lang.refle ct.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120 )
public class TenantAdapter extends RecyclerView.Adapter<TenantAdapter.TenantViewHolder> {
private List<Tenant> values;
private final OnItemClickListener listener;
public TenantAdapter (List<Tenant> values, OnItemClickListener listener) {
this.values = values;
this.listener = listener;
}
public interface OnItemClickListener {
void onItemClick(Tenant tenant);
}
static class TenantViewHolder extends RecyclerView.ViewHolder {
TextView nameTextView;
TenantViewHolder(TextView itemView) {
super(itemView);
nameTextView = itemView;
}
void bind(final Tenant tenant, final OnItemClickListener listener){
nameTextView.setText(tenant.getName());
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listener.onItemClick(tenant);
}
});
}
}
@Override
public TenantViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rowView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tenant, parent, false);
TextView nameTextView = (TextView) rowView.findViewById(R.id.item_tenant_name);
TenantViewHolder tenantViewHolder = new TenantViewHolder(nameTextView);
return tenantViewHolder;
}
@Override
public void onBindViewHolder(TenantViewHolder holder, int position) {
holder.bind(values.get(position), listener);
}
@Override
public int getItemCount() {
return values.size();
}
}
public class TenantActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tenant);
recyclerView = (RecyclerView) findViewById(R.id.activity_tenant_recycler_view);
recyclerView.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
List<Tenant> values = new ArrayList<>();
Tenant temp = new Tenant();
temp.setName("Gurdwara Guru Nanak Mission Sewa Society");
values.add(temp);
adapter = new TenantAdapter(values, new TenantAdapter.OnItemClickListener() {
@Override
public void onItemClick(Tenant tenant) {
TenantActivity.this.startActivity(new Intent(TenantActivity.this, HomeActivity.class));
}
});
recyclerView.setAdapter(adapter);
}
}
你逝去的孩子的TextView在ViewHolder的构造函数是不对的。您应该传递父视图并将其解包到构造函数中。
static class TenantViewHolder extends RecyclerView.ViewHolder {
TextView nameTextView;
TenantViewHolder(View itemView) {
super(itemView);
nameTextView = (TextView) itemView.findViewById(R.id.item_tenant_name);
}
}
并在您的适配器只是直接通过充气视图。
@Override
public TenantViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rowView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tenant, parent, false);
TenantViewHolder tenantViewHolder = new TenantViewHolder(rowView);
return tenantViewHolder;
}