2017-02-23 1 views
0

Könnte jemand mir helfen? Ich weiß nicht, warum ich diesen Fehler erhalte.Das angegebene Kind hat bereits einen Elternteil und erstellt eine Recycler-Ansicht.

FATAL AUSNAHME: Haupt Prozess: com.sangra.igurdwara, PID: 24038 java.lang.IllegalStateException: Das angegebene Kind hat bereits einen Elternteil. Sie müssen zuerst removeView() für das übergeordnete Element des Kindes aufrufen. bei android.view.ViewGroup.addViewInner (ViewGroup.java:4659) bei android.view.ViewGroup.addView (ViewGroup.java:4495) bei android.view.ViewGroup.addView (ViewGroup.java:4436) bei android.support.v7.widget.RecyclerView $ 5.addView (RecyclerView.java:676) bei android.support.v7.widget.ChildHelper.addView (ChildHelper.java:107) bei android.support.v7.widget.RecyclerView $ LayoutManager.addViewInt (RecyclerView.java:7399) bei android.support.v7.widget.RecyclerView $ LayoutManager.addView (RecyclerView.java:7357) bei android.support.v7.widget.RecyclerView $ LayoutManager.addView (RecyclerView .java: 7345) bei android.support.v7.widget.LinearLayoutManager.layoutChunk (LinearLayoutManager.java:1459) bei android.support.v7.widget.LinearLayoutManager.fill (LinearLayoutManager.java:1408) bei android.support.v7.widget. LinearLayoutManager.onLayoutChildren (LinearLayoutManager.java:580) bei android.support.v7.widget.RecyclerView.dispatchLayoutStep2 (RecyclerView.java:3374) bei android.support.v7.widget.RecyclerView.dispatchLayout (RecyclerView.java:3183) bei android.support.v7.widget.RecyclerView.onLayout (RecyclerView.java:3627) bei android.view.View.layout (View.java:17993) bei android.view.ViewGroup.layout (ViewGroup.java: 5817) bei android.widget.LinearLayout.setChildFrame (LinearLayout.java:1742) bei android.widget.LinearLayout.layoutHorizontal (LinearLayout.java:1731) bei android.widget.LinearLayout.onLayout (LinearLayout.java:1496) bei android.view.View.layout (View.java:17993) bei android.view.ViewGroup.layout (ViewGroup.java:5817) bei android.widget.FrameLayout.layoutChildren (FrameLayout.java:344) bei android. widget.FrameLayout.onLayout (FrameLayout.java:281) bei android.view.View.layout (View.java:17993) bei android.view.ViewGroup.layout (ViewGroup.java:5817) bei android.support.v7.widget.ActionBarOverlayLayout.onLayout (ActionBarOverlayLayout.java:437) bei android.view.View.layout (View.java:17993) bei android.view.ViewGroup.layout (ViewGroup.java:5817) bei android.widget.FrameLayout.layoutChildren (FrameLayout.java:344) bei android.widget.FrameLayout.onLayout (FrameLayout.java:281) bei android.view.View.layout (View.java:17993) bei android.view.ViewGroup.layout (ViewGroup.java:5817) bei android.widget.LinearLayout.setChildFrame (LinearLayout.java:1742) bei android.widget.LinearLayout.layoutVertical (LinearLayout.java:1585) bei android.widget.LinearLayout.onLayout (LinearLayout.java:1494) bei android.view.View.layout (View.java:17993) bei android.view.ViewGroup.layout (ViewGroup.java: 5817) bei android.widget.FrameLayout.layoutChildren (FrameLayout.java:344) bei android.widget.FrameLayout.onLayout (FrameLayout.java:281) bei com.android.internal.policy.PhoneWindow $ DecorView. onLayout- (PhoneWindow.java:3172) bei android.view.View.layout (View.java:17993) bei android.view.ViewGroup.layout (ViewGroup.java:5817) bei android.view.ViewRootImpl.performLayout (ViewRootImpl.java:2759) bei android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2460) bei android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1528) bei android.view.ViewRootImpl $ Trav ersalRunnable.run (ViewRootImpl.java:7524) bei android.view.Choreographer $ CallbackRecord.run (Choreographer.java:911) bei android.view.Choreographer.doCallbacks (Choreographer.java:686) bei android.view. Choreographe.doFrame (Choreographer.java:622) bei android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:897) bei android.os.Handler.handleCallback (Handler.java:739) bei android.os. Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:7325) bei java.lang.refle ct.Method.invoke (Native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1230) bei 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); 
    } 

} 

Antwort

1

Sie passieren das Kind Textview in dem Konstruktor des ViewHolder das ist nicht richtig. Sie sollten die übergeordnete Ansicht übergeben und sie stattdessen im Konstruktor auspacken.

static class TenantViewHolder extends RecyclerView.ViewHolder { 

    TextView nameTextView; 

    TenantViewHolder(View itemView) { 
     super(itemView); 
     nameTextView = (TextView) itemView.findViewById(R.id.item_tenant_name); 
    } 
} 

und in Ihrem Adapter nur die aufgeblasene Ansicht direkt übergeben.

@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; 
} 
Verwandte Themen