Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 删除项目时刷新RecyclerView_Android - Fatal编程技术网

Android 删除项目时刷新RecyclerView

Android 删除项目时刷新RecyclerView,android,Android,我创建了一个图书应用程序。我在弹出菜单中设计了cardview,您可以删除该项。我可以删除项目,但它仍然看起来像。我的问题是,当删除项目时,recyclerview不会刷新。你能帮助我吗?我在这里尝试了很多方法,但我无法解决我的问题 您必须在删除项刷新适配器之后 @Override public void onBindViewHolder(final BookViewHolder holder, final int position) { final Upload

我创建了一个图书应用程序。我在弹出菜单中设计了cardview,您可以删除该项。我可以删除项目,但它仍然看起来像。我的问题是,当删除项目时,recyclerview不会刷新。你能帮助我吗?我在这里尝试了很多方法,但我无法解决我的问题

您必须在删除项刷新适配器之后

    @Override
    public void onBindViewHolder(final BookViewHolder holder, final int position) {
        final Upload uploadCurrent = mUploads.get(position);
        holder.iBookName.setText(uploadCurrent.getBookName());
        holder.iBookAuthor.setText(uploadCurrent.getBookAuthor());
        holder.iBookPublisher.setText(uploadCurrent.getBookPublisher());
        /*holder.iBookDesc.setText(uploadCurrent.getBookDesc());*/
        Picasso.with(mContext)
                .load(uploadCurrent.getBookImage())
                .placeholder(R.drawable.blank)
                .fit()
                .into(holder.iBookImage);
        holder.iBookMenu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                PopupMenu popup = new PopupMenu(mContext, holder.iBookMenu);
                popup.inflate(R.menu.cardview_menu);
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()) {
                            case R.id.add_my_list:
                                break;
                            case R.id.delete_my_list:
                                deleteBook(mUploads.get(position).getBookId());
                                break;
                        }
                        return false;
                    }
                });
                popup.show();
            }
        });
    }

    private void deleteBook(String id) {
        DatabaseReference dR = FirebaseDatabase.getInstance().getReference("Books").child(id);
        dR.removeValue();
        Toast.makeText(mContext, "Book deleted", Toast.LENGTH_SHORT).show();
    }

    @Override
    public int getItemCount() {
        return mUploads.size();
    }
}
你应该使用

 @Override
    public void onBindViewHolder(final BookViewHolder holder, final int position) {
        final Upload uploadCurrent = mUploads.get(position);
        holder.iBookName.setText(uploadCurrent.getBookName());
        holder.iBookAuthor.setText(uploadCurrent.getBookAuthor());
        holder.iBookPublisher.setText(uploadCurrent.getBookPublisher());
        /*holder.iBookDesc.setText(uploadCurrent.getBookDesc());*/
        Picasso.with(mContext)
                .load(uploadCurrent.getBookImage())
                .placeholder(R.drawable.blank)
                .fit()
                .into(holder.iBookImage);
        holder.iBookMenu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                PopupMenu popup = new PopupMenu(mContext, holder.iBookMenu);
                popup.inflate(R.menu.cardview_menu);
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()) {
                            case R.id.add_my_list:
                                break;
                            case R.id.delete_my_list:
                                deleteBook(mUploads.get(position).getBookId(),position);
                                break;
                        }
                        return false;
                    }
                });
                popup.show();
            }
        });
    }

private void deleteBook(String id,int position) {
        DatabaseReference dR = FirebaseDatabase.getInstance().getReference("Books").child(id);
        dR.removeValue();
        // position of item delete in your adapter model
        notifyItemRemoved(position);
        Toast.makeText(mContext, "Book deleted", Toast.LENGTH_SHORT).show();
    }

在item remove method中。

在对您的同一问题感到非常沮丧之后,我修改了我的
RecycleServiceAdapter
以使用
ListAdapter

以下是我的
RecycleServiceAdapter
的外观:

@Override
public void onClick(View v) {
notifyDataSetChanged() 
}
并调用
adapter.submitList(您的列表)列表随时更新

在我的例子中,我在我的
OnDataChange
回调中调用
submitList


我遵循了这一点。

在RecyclerView.Adapter中有许多方法。您可以使用notifyItemDeletedplease选择最佳答案<代码>已删除(位置)
是必需的int,但我的是String
private void deleteBook(String id)
如何解决这一问题?如何更改此行-deleteBook(mUploads.get(position.getBookId(),position);它刷新了,但增加了一个新的。不会出现在database@MustafaKemalÖz你确定这个代码是db的删除项吗?DatabaseReference dR=FirebaseDatabase.getInstance().getReference(“书籍”).child(id);removeValue博士()@Mustafa KemalÖz太好了!你可以选择我的答案是最好的答案(选择左边的勾号)
public class RecyclerViewAdapter extends ListAdapter<YourObjectType, RecyclerViewAdapter.ViewHolder> {
    ...

    public RecyclerViewAdapter() {
        super(DIFF_CALLBACK);
        ...
    }

    public static final DiffUtil.ItemCallback<YourObjectType> DIFF_CALLBACK = new DiffUtil.ItemCallback<YourObjectType>() {
        @Override
        public boolean areItemsTheSame(@NonNull YourObjectType oldItem, @NonNull YourObjectType newItem) {
            return oldItem.compareTo(newItem)==0; //I added a compareTo method to myObjectClass so that I can compare them.
        }

        @Override
        public boolean areContentsTheSame(@NonNull YourObjectType oldItem, @NonNull YourObjectType newItem) {
            return oldItem.compareTo(newItem)==0; //I added a compareTo method to myObjectClass so that I can compare them.
        }
    };

    @NonNull
    @Override
    public RecyclerViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_listitem, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final RecyclerViewAdapter.ViewHolder holder, final int position) {
        ...
    }

    class ViewHolder extends RecyclerView.ViewHolder{
        ...
        ViewHolder(View itemView) {
            super(itemView);
            ...
        }
    }
}
private void initRecyclerView(){
    RecyclerView recyclerView = findViewById(R.id.recycler_view);
    recyclerView.invalidate();
    adapter = new RecyclerViewAdapter();
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
}