数据更新后从recyclerView中删除项目

时间:2019-11-06 16:45:25

标签: android android-recyclerview

我正在从适配器内部的recyclerview更新数据:

 private void desmarcar_anuncio_favorito(final String anuncioF, final String usuarioF, final Integer position) {
        // Tag used to cancel the request
        String tag_string_req = "req_login";



        StringRequest strReq = new StringRequest(Request.Method.POST,
                URL_MEDIA_ANUNCIO, new Response.Listener<String>() {

            @Override
            public void onResponse(String response) {


                String ultimo = response;
                String ya = "borrado";
                if (ultimo.equals(ya)){
                    Toast.makeText(context,"Anuncio eliminado de favoritos",Toast.LENGTH_SHORT).show();
                    updateData(anuncios);

                }
                else {
                    Toast.makeText(context,"Error al eliminar anuncio de favoritos",Toast.LENGTH_SHORT).show();
                }


            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {


            }
        }) {

            @Override
            protected Map<String, String> getParams() {
                // Posting parameters to login url
                Map<String, String> params = new HashMap<String, String>();
                params.put("anuncio", anuncioF);
                params.put("usuario", usuarioF);





                return params;
            }

        };

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
    }



public void updateData(List data) {
        this.anuncios = data;
        notifyDataSetChanged();
    }

使用此代码,更新是在远程数据库中完成的,但是recyclerview项未更新,在这种情况下,应将其从recyclerview中删除。

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

updateData(anuncios);

您要使用数据anuncios的当前值更新recyclerview,必须从清单anuncios.remove(indexOfItemRemoving)中删除该项目,然后调用notifyDataSetChanged()notifyItemRemoved(indexOfItemRemoving) < / p>

您需要做的是indexOfItemRemoving进行更新。

您的方法updateData将您的情况下的列表替换为以前的列表,您需要更改列表并仅通知适配器。

类似的东西:

    if (ultimo.equals(ya)){
        Toast.makeText(context,"Anuncio eliminado de favoritos",Toast.LENGTH_SHORT).show();
        int indexOfItemRemoving = anuncios.size(); // get the correct item here instead
        anuncios.remove(indexOfItemRemoving);
        notifyItemRemoved(indexOfItemRemoving);
    }

使用notifyItemInserted / Removed / RangeChanged会有一个优势,因为RecyclerView可以通过很好的事件动画反馈来处理这些事件