首页 > 解决方案 > 向 Recyclerview 添加或删除项目会出现错误“指定的孩子已经有父母”。

问题描述

每当我尝试从 recyclerview 添加或删除项目时,都会弹出以下错误并且应用程序崩溃:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

Recyclerview 的代码

public class KeywordsAdapter extends RecyclerView.Adapter<KeywordsAdapter.ViewHolder> {
    private ArrayList<String> keywords;
    private Context context;
    private int totalCount = 0;
    private boolean isLoading = false;

    public class ViewHolder extends RecyclerView.ViewHolder {
        private Chip mChip;
        private View view;

        public ViewHolder(View itemView) {
            super(itemView);
            view = itemView;
            mChip = itemView.findViewById(R.id.chip);
        }

    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_keyword, parent, false);
        final ViewHolder pvh = new ViewHolder(v);
        return pvh;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        final String keyword = keywords.get(position);

        holder.mChip.setChipText(keyword);

        holder.mChip.setOnCloseClickListener(new OnCloseClickListener() {
            @Override
            public void onCloseClick(View v) {
                removeItem(holder.getAdapterPosition());
            }
        });

    }

    @Override
    public int getItemCount() {
        return keywords.size();
    }


    public KeywordsAdapter(Context c, ArrayList<String> keywords) {
        this.keywords = keywords;
        this.context = c;
    }

}

添加项目的代码

public void addTo(String newDueItems) {
    this.keywords.add(0, newDueItems);
    notifyItemInserted(0);
}

删除项目的代码

public void removeItem(int position) {
    this.keywords.remove(position);
    notifyItemRemoved(position);
}

没有动态添加或删除视图。所有的添加和删除都是通过上述方法完成的。任何帮助将不胜感激!

标签: javaandroidarraylistandroid-recyclerview

解决方案


推荐阅读