首页 > 解决方案 > 如何从 RecyclerView 中删除和撤消删除项目

问题描述

我制作文字游戏,我希望能够从编辑文本中删除文本并将其返回到 recyclerview 项目。我做到了,但我的项目编号只是增加或移动一个字段。这是我的代码。这是我已经尝试过的方法,但是正如我在删除项目时提到的,所有项目都移动到一个地方,而不是我尝试删除然后从编辑文本中添加项目,这会导致每次都添加新项目。所以有什么方法可以获取位置存储它然后将其准确地检索到从中获取的位置

 @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("");

标签: androidandroid-recyclerview

解决方案


1-您可以在活动类中创建公共静态列表。

2-将其定义为您需要传递给recyclerview的列表。

3-将其作为参数传递给recyclerview以显示。

4-将其放入适配器中。

5-您将拥有适配器中每个项目的位置,该位置与每个元素的索引相同,因此当您需要删除一个项目时,您可以这样做:

    list.remove(position); 

你会得到它删除。

6-如果您需要保留已删除的项目以供以后显示或任何内容,您可以在您的活动类中为已删除的项目创建另一个列表,在您删除它之前,将其添加到您的另一个列表中。


推荐阅读