Как добиться удаления и отменить удаление элементов из RecyclerView - PullRequest
0 голосов
/ 25 марта 2020

Я создаю игру в слова и хочу иметь возможность удалять текст из редактируемого текста и возвращать его обратно в элемент просмотра макулатуры. Я сделал это, но мой номер элемента только растет или перемещается для одного поля. Вот мой код. Это попытка, которую я уже пробовал, но, как я уже упоминал, когда удалялся элемент, все элементы перемещались на одно место, я пытался удалить, а затем добавить элемент из редактируемого текста, и это вызывает добавление нового элемента каждый раз. это, а затем получить его именно на место, из которого берется

 @Override
    public void onItemClick(View view, int position) {
        edit.setText(edit.getText() + adapter.getItem(position).toString().toUpperCase());
        edit.toString().toUpperCase();



      // mediaPlayer2 = MediaPlayer.create(Asocijacije.this, R.raw.clickbutton);
        if(on==true){
            MediaPlayerWraper.play(Asocijacije.this,R.raw.clickbutton);
        }



       for(int i=0;i<suggestSource.size();i++){
           //index   dr element
          ListaSlova.add(i,position);
          itemClicked=ListaSlova.get(i);
       }

      //  suggestSource.remove(position);
       suggestSource.set(position,"");




        simpleArray = new String[suggestSource.size()];
        suggestSource.toArray(simpleArray);
      recyclerView = findViewById(R.id.recyclerView);
        int numberOfColumns = 6;
        recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
       adapter = new MyRecyclerViewAdapter(this, simpleArray);

        adapter.setClickListener(this);
        recyclerView.setAdapter(adapter);







     adapter.notifyDataSetChanged();
         adapter.notifyItemChanged(position);
       adapter.notifyItemRangeChanged(position, suggestSource.size());
        lvl.setText("lvl: " + String.valueOf(curquestion));

    }
    public void obrisi() {
     //   mediaPlayer3 = MediaPlayer.create(Asocijacije.this, R.raw.obrisi);
        if(on==true){
            MediaPlayerWraper.play(Asocijacije.this,R.raw.obrisi);
        }



        String text = edit.getText().toString();
        tapped+=1;

        if (text.length() >= 1) {
            edit.setText((text.substring(0, text.length() - 1)));
          String lastL = text.substring(text.length() - 1);

            suggestSource.remove(ListaSlova.get(itemClicked));
            suggestSource.add(ListaSlova.get(itemClicked),lastL);
             //suggestSource.remove(itemClicked);


            edit.setVisibility(View.VISIBLE);

            simpleArray = new String[suggestSource.size()];
            suggestSource.toArray(simpleArray);

            recyclerView = findViewById(R.id.recyclerView);
            int numberOfColumns = 6;
            recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
            adapter = new MyRecyclerViewAdapter(this, simpleArray);
            adapter.setClickListener(this);
            recyclerView.setAdapter(adapter);
            adapter.notifyDataSetChanged();
      //  adapter.notifyItemInserted(suggestSource.size() + 1);
        //    adapter.notifyItemRangeChanged(suggestSource.size() + 1, suggestSource.size());
          //  adapter.notifyDataSetChanged();



            //  adapter.notifyItemInserted(suggestSource.size()+1);


        } else
            edit.setText("");

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

1- Вы можете создать список публикуемых c stati c в своем классе активности.

2 - определите его как список, который вам нужно передать в просмотрщик.

3 - передать его в просмотрщик в качестве параметра для отображения.

4 - получите его в свой адаптер.

5 - у вас будет позиция каждого элемента в вашем адаптере, которая совпадает с индексом каждого элемента, поэтому, когда вам нужно удалить элемент, вы можете сделать это:

    list.remove(position); 

и вы его удалите.

6 - если вам нужно сохранить удаленные элементы, чтобы отобразить их позже, или что-либо еще, то вы можете создать другой список в своем классе активности для удаленных элементов и, прежде чем удалить его, добавьте его в другой список.

0 голосов
/ 26 марта 2020

Взгляните на этот учебник , начиная с шага 2, в нем объясняется, как установить адаптер и как удалить элемент.

В вашем Activity или Fragment создайте новый ItemTouchHelper с помощью нашего SwipeToDeleteCallback и присоедините его к RecyclerView.

private void setUpRecyclerView() {
    recyclerView.setAdapter(mAdapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    ItemTouchHelper itemTouchHelper = new 
            ItemTouchHelper(new SwipeToDeleteCallback(mAdapter));
    itemTouchHelper.attachToRecyclerView(recyclerView);
}

для удаления (все еще в адаптере):

public void deleteItem(int position) {
    mRecentlyDeletedItem = mListItems.get(position);
    mRecentlyDeletedItemPosition = position;
    mListItems.remove(position);
    notifyItemRemoved(position);
    showUndoSnackbar();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...