单击按钮时,如何删除RecyClerview项目



我正在制作一个应用程序,在其中我使用nodejs和mongodb作为后端服务。当用户单击删除按钮时,我想删除与MongoDB中相对应的回收器查看项目和数据。

这是我到目前为止所做的:

mypostedbookadapter.java

public class MyPostedBookAdapter extends RecyclerView.Adapter<MyPostedBookAdapter.ViewHolder> {
List<PostedModel> listItem;
Context context;
public MyPostedBookAdapter(List<PostedModel> listItem, Context context){
    this.listItem = listItem;
    this.context = context;
}
@NonNull
@Override
public MyPostedBookAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.posted_book,viewGroup,false);

    return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull MyPostedBookAdapter.ViewHolder viewHolder, final int i) {
    PostedModel model =  listItem.get(i);
    viewHolder.userBookName.setText(model.getPurchaseBookName());
    RequestOptions requestOptions = new RequestOptions();
    requestOptions.placeholder(R.drawable.openbook);
    Glide.with(context).load(model.getPurchaseImage()).apply(requestOptions).into(viewHolder.userPostBook);
    viewHolder.delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           }
    });
}
@Override
public int getItemCount() {
    return listItem.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
    ImageView userPostBook;
    TextView userBookName;
    Button delete;
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        userPostBook = (itemView).findViewById(R.id.userPostBook);
        userBookName = (itemView).findViewById(R.id.userBookName);
        delete = (itemView).findViewById(R.id.delete);
    }
  }
}

fragment.java

public class Tab2Fragment extends Fragment {

RecyclerView recyclerView;
ProgressBar progressBar1;
ImageView postImage;
List<PostedModel> listItem;
private static final String URL = "https://www.example.com";
public Tab2Fragment() {
    // Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_tab2, container, false);
    postImage = view.findViewById(R.id.postImage);
    progressBar1 = view.findViewById(R.id.progressBar1);
    recyclerView = view.findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    listItem = new ArrayList<>();
    loadPurchasedBook();
    return view;
}
private void loadPurchasedBook(){
    OkHttpClient client = new OkHttpClient.Builder()
                          .connectTimeout(22, TimeUnit.SECONDS)
                          .readTimeout(22,TimeUnit.SECONDS)
                          .writeTimeout(22,TimeUnit.SECONDS)
                          .build();
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onResponse(Call call, final Response response) throws IOException {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    try {
                        progressBar1.setVisibility(View.GONE);
                        JSONArray array = new JSONArray(response.body().string());
                        if(array.length() == 0){
                            postImage.setVisibility(View.VISIBLE);
                        }
                        for(int i=0;i<array.length();i++){
                            JSONObject object = array.getJSONObject(i);
                            String str1 = object.getString("Book_name");
                            String str2 = object.getString("Book_image");
                            PostedModel model = new PostedModel(str2,str1);
                            listItem.add(model);
                        }
                        MyPostedBookAdapter adapter = new MyPostedBookAdapter(listItem,getActivity());
                        recyclerView.setAdapter(adapter);
                    }catch (JSONException e) {
                        e.printStackTrace();
                    }catch (IOException e) {
                        e.printStackTrace();
                    }
                    finally{
                        response.close();
                    }
                }
            });
        }
        @Override
        public void onFailure(Call call, final IOException e) {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    progressBar1.setVisibility(View.GONE);
                    TastyToast.makeText(getActivity(),"Error:"+e.getMessage(),TastyToast.LENGTH_LONG
                            ,TastyToast.ERROR).show();
                }
            });
        }
    });
  }
}

这就是我从节点服务器获取数据的方式,现在我想在单击删除按钮时删除特定的回收器视图项目。有人请让我知道该怎么做。

将此代码添加到适配器

private void removeAt(int position) {
    list.remove(position);
    notifyItemRemoved(position);
    notifyItemRangeChanged(position, list.size());
}

使用这样的使用

viewHolder.delete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       removeAt(i)//i is your adapter position
    }
});

最新更新