首页 文章

指定的子项已具有父项,从而创建了回收站视图

提问于
浏览
0

有人可以帮助我,我不知道为什么我会收到这个错误 .

致命异常:主程序:com.sangra.igurdwara,PID:24038 java.lang.IllegalStateException:指定的子项已经有父项 . 您必须首先在孩子的父母上调用removeView() . 在Android.view.View.addView(ViewGroup.java:4495)的android.view.ViewGroup.addViewInner(ViewGroup.java:4659)的android.view.ViewA.View( . View :.在android.support.v7.widget.RecyclerView $ LayoutManager.addViewInt(RecyclerView)的android.support.v7.widget.ChildHelper.addView(ChildHelper.java:107)上的v7.widget.RecyclerView $ 5.addView(RecyclerView.java:676) .java:7399)在Android.support.v7.widget.RecyclerView $ LayoutManager.addView(RecyclerView.java:7357)的android.support.v7.widget.RecyclerView $ LayoutManager.addView(RecyclerView.java:7345) . 在android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager)的android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1408)上的support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1459) . java:580)在android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3374)在android.support.v7.widget.RecyclerView.dispatchLayout(R ecyclerView.java:3183)在android.view.View.layout(View.java:17993)的android.view.ViewGroup.layout(ViewGroup)上的android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3627) .java:5817)在android.widget.LinearLayout.alLayout.alLayout(LinearLayout.java:1496)的android.widget.LinearLayout.setoutHorizontal(LinearLayout.java:1731)的android.widget.LinearLayout.setChildFrame(LinearLayout.java:1742)在Android.widget的android.widget.FrameLayout.layoutChildren(FrameLayout.java:344)的android.view.View.layout(ViewGroup.java:5817)上的android.view.View.layout(View.java:17993) . FrameLayout.onLayout(FrameLayout.java:281)在android.view.View.layout(View.java:17993)的android.view.ViewGroup.layout(ViewGroup.java:5817)android.support.v7.widget.ActionBarOverlayLayout .onLayout(ActionBarOverlayLayout.java:437)位于android.view.Viewout上的android.view.View.layout(View.java:17993),android.widget.FrameLayout.layoutChildren(FrameLayout . java:344)在android.w位于android.view.Linout.setChildFrame的android.view.View.layout(ViewGroup.java:5817)上的android.view.View.layout(View.java:17993)中的idget.FrameLayout.onLayout(FrameLayout.java:281) (LinearLayout.java:1742)在Android.widget.Line中的android.widget.LinearLayout.onLayout(LinearLayout.java:1494)上的android.widget.LinearLayout.onLayout(LinearLayout.java:1494) . (View.java: 17993)在Android.widget.FrameLayout.layoutChildren(FrameLayout.java:344)的android.view.ViewGroup.layout(ViewGroup.java:5817),位于com的android.widget.FrameLayout.onLayout(FrameLayout.java:281) . 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)位于android.view.ViewRootImpl.exeTraversals(ViewRootImpl.java:2460)的android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1528)android.view.ViewRootImpl $ TRAVER salRunnable.run(ViewRootImpl.java:7524)位于android.view.Choreographer.doFrame的android.view.Choreographer $ CallbackRecord.run(Choreographer.java:911)android.view.Choreographer.doCallbacks(Choreographer.java:686) (Choreographer.java:622)在android.view.Handler.dispatchMessage(Handler,android.view.Handler.handleCallback(Handler.java:739))的android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:897)上 . java:95)在android.app.Looper.loop(Looper.java:148)的android.app.ActivityThread.main(ActivityThread.java:7325)at java.lang.reflect.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);
    }

}

1 回答

  • 3

    您正在ViewHolder的构造函数中传递子TextView,这是不对的 . 您应该传递父视图并在构造函数中将其解包 .

    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;
    }
    

相关问题