Удаление фишек не работает должным образом - почему? - PullRequest
0 голосов
/ 18 октября 2019

Я создал ключевое слово, вводящее EditText. После ввода некоторого текста и ввода пробела текст будет заменен на чип. Я создал представление переработчика с использованием как чипа, так и представления EditText методом добавления заголовка. Это представление, которое я создал: . при вводе клавиши удаления (кнопка возврата на клавиатуре) удаляются микросхемы.

проблема заключается в том, что при добавлении микросхемы снова появляются первые удаленные микросхемы.

Это мой адаптеркласс.

public class KeyWordchipAdapter extends RecyclerView.Adapter {
    private static final int TYPE_HEADER = 0;
    private static final int TYPE_ITEM = 2;
    private List<String> stringArrayList;
    private Activity activity;
    Chip chip;

    public KeyWordchipAdapter(List<String> stringArrayList, Activity activity) {
        this.stringArrayList = stringArrayList;
        this.activity = activity;
        this.addItemListner = (CreateBoatActivity)activity;
    }

    ChipsRecyclerClickListner addItemListner;

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType == TYPE_ITEM) {
            View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_chip_group_layout, parent, false);
            return new ItemViewHolder(itemView);
        } else if (viewType == TYPE_HEADER) {
            View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_chip_edittext_layout, parent, false);
            return new HeaderViewHolder(itemView);
        }
        else return null;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof HeaderViewHolder) {
            final HeaderViewHolder headerHolder = (HeaderViewHolder) holder;
            headerHolder.headerTitle.setHint("Enter Keywords");
            headerHolder.headerTitle.addTextChangedListener(new TextWatcher() {
                private int lastLength;
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    lastLength = s.length();
                }
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    try {
                        if (lastLength > s.length()) return;
                        if (s.charAt(s.length() - 1) == 32) {
                            addItemListner.keywordListener(headerHolder.headerTitle.getText().toString().replaceAll("\\s+",""),position);
                            headerHolder.headerTitle.setText("");
                            headerHolder.headerTitle.setFocusable(true);
                            headerHolder.headerTitle.requestFocus();
                        }
                    } catch (IndexOutOfBoundsException ex) {
                    }
                }
                @Override
                public void afterTextChanged(Editable s) {
                }
            });

            headerHolder.headerTitle.setOnKeyListener(new View.OnKeyListener() {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (event.getAction() == KeyEvent.ACTION_DOWN
                            && event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
                        if(stringArrayList.size()>0 && headerHolder.headerTitle.getText().toString().length() == 0){
                            if (addItemListner != null) {
                                stringArrayList.remove(position-1);
                                notifyItemRemoved(position-1);
                                notifyItemRangeChanged(position-1, stringArrayList.size());
                            }
                        }
                    }
                    return false;
                }
            });
        }
        else if (holder instanceof ItemViewHolder) {
            ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
            if(stringArrayList.size()== 0){
            }
            else {
                chip=new Chip(activity);
                chip.setText(stringArrayList.get(position));
                chip.setCloseIconVisible(true);
                chip.setCheckable(false);
                chip.setClickable(false);
                itemViewHolder.itemText.addView(chip);
                itemViewHolder.itemText.setVisibility(View.VISIBLE);
            }
        }
    }
    @Override
    public int getItemViewType(int position) {
        if (position == stringArrayList.size()) {
            return TYPE_HEADER;
        } else {
            return TYPE_ITEM;
        }
    }
    @Override
    public int getItemCount() {
        return stringArrayList.size()+1;
    }
    private class HeaderViewHolder extends RecyclerView.ViewHolder {
        EditText headerTitle;

        public HeaderViewHolder(View view) {
            super(view);
            headerTitle = (EditText) view.findViewById(R.id.et_data);
        }
    }

    private class ItemViewHolder extends RecyclerView.ViewHolder {
        ChipGroup itemText;

        public ItemViewHolder(View itemView) {
            super(itemView);
            itemText = (ChipGroup) itemView.findViewById(R.id.chip_group);
        }
    }
}

и это мой обратный вызов в моей деятельности.

@Override
    public void keywordListener(String value, int position) {
            keywordListItem.add(value);     
    }
...