【问题标题】:java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first 2java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView() 2
【发布时间】:2017-09-05 12:04:39
【问题描述】:

我在将 cardview 添加到 recyclerview 项目时收到此错误。有人可以告诉我我做错了什么以及在哪里删除父视图?还有人可以解释为什么我会收到这个错误吗?谢谢。

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:card_view="http://schemas.android.com/apk/res-auto">

    <data>

        <import type="android.view.View"/>

        <variable
            name="chatsViewModel"
            type="com.sukshi.sukshichat.viewmodel.ChatsViewModel"/>
    </data>

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <RelativeLayout
        android:id="@+id/ln_item_row"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:background="#FFFFFF"
        android:onClick="@{chatsViewModel::onItemClick}"
        android:orientation="horizontal"
        android:padding="16dp"
        android:visibility="@{chatsViewModel.sender ? View.GONE : View.VISIBLE}">

        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/iv_user_photo"
            style="@style/AppTheme.CircleImgList"
            app:civ_border_color="@color/circle_iv_border"
            app:civ_border_width="1dp"
            app:photoUrl="@{chatsViewModel.photoUrl}"
            tools:src="@drawable/ic_person"/>


    </RelativeLayout>
    </android.support.v7.widget.CardView>
</layout>

`

这就是我膨胀我的布局的方式

 mAdapter = new FirebaseRecyclerAdapter<User, ChatsItemHolder>(User.class, R.layout.adapter_item_chats,
            ChatsItemHolder.class, refUsers) {
        @Override
        public ChatsItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            AdapterItemChatsBinding adapterItemChatsBinding = DataBindingUtil.inflate(LayoutInflater
                    .from(parent.getContext()), viewType, parent, false);
            return new ChatsItemHolder(adapterItemChatsBinding);
        }

这是我的 ChatItemHolder

public static class ChatsItemHolder extends RecyclerView.ViewHolder {
            private AdapterItemChatsBinding mAdapterItemChatsBinding;

            public ChatsItemHolder(AdapterItemChatsBinding adapterItemChatsBinding) {
                super(adapterItemChatsBinding.lnItemRow);
                this.mAdapterItemChatsBinding = adapterItemChatsBinding;
            }

            public void bindUser(User user, ChatsViewModelContract contract) {
                if (mAdapterItemChatsBinding.getChatsViewModel() == null) {
                    mAdapterItemChatsBinding.setChatsViewModel(new ChatsViewModel(user, mEncodedMail,
                            contract));
                } else {
                    mAdapterItemChatsBinding.getChatsViewModel().setUser(user);
                }
            }
        }

【问题讨论】:

  • 向 CardView 添加一个父布局
  • 又是同样的问题
  • 尝试将最后一个参数更改为 true。
  • 没用。谢谢
  • @stackover65 你能发布 ChatsItemHolder 吗?

标签: java android data-binding


【解决方案1】:

你可以试试这个,

将 ChatsItemHolder 构造函数更改为

public ChatsItemHolder(AdapterItemChatsBinding adapterItemChatsBinding) {
    super(adapterItemChatsBinding);
    this.mAdapterItemChatsBinding = adapterItemChatsBinding;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2015-09-06
    • 2020-02-16
    • 2014-06-02
    相关资源
    最近更新 更多