程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了删除项目后如何重新加载/刷新 RecyclerView大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决删除项目后如何重新加载/刷新 RecyclerView?

开发过程中遇到删除项目后如何重新加载/刷新 RecyclerView的问题如何解决?下面主要结合日常开发的经验,给出你关于删除项目后如何重新加载/刷新 RecyclerView的解决方法建议,希望对你解决删除项目后如何重新加载/刷新 RecyclerView有所启发或帮助;

我已经尝试过该站点的许多解决方案。但仍然没有得到有效的解决方案。

这是我的 Fragment 类。我已经在这个类中设置了 Adpater。

public class FeedFragment extends Fragment {
    RecyclerVIEw recyclerVIEw;
    Context context;
    floatingActionbutton addFeedbutton;
    private ArrayList<Feed> Feeds;
    FeedService FeedService;
    FeedRecyclerVIEwAdapter FeedRecyclerVIEwAdapter;
    TextVIEw noDataTextVIEw;


    @OverrIDe
    public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) {


        VIEw vIEw = inflater.inflate(R.layout.fragment_Feed,container,false);
        noDataTextVIEw = vIEw.findVIEwByID(R.ID.no_data_textVIEw);
        addFeedbutton = vIEw.findVIEwByID(R.ID.Feed_floating_button);
        System.out.println(getRole());
        if (getRole().equals("RolE_admin")) {
            addFeedbutton.setVisibility(VIEw.VISIBLE);
        } else {
            addFeedbutton.setVisibility(VIEw.GONE);
        }
        addFeedbutton.setonClickListener(v -> {
            AddFeedFragment addFeedFragment = new AddFeedFragment();
            FragmentManager fragmentManager = Objects.requireNonNull(getActivity()).getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.ID.container_for_fragments,addFeedFragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();

        });
        recyclerVIEw = vIEw.findVIEwByID(R.ID.FeedRecyclerVIEw);
        recyclerVIEw.setHasFixedSize(true);
        linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(context,linearlayoutmanager.VERTICAL,false);
        recyclerVIEw.setLayoutManager(linearlayoutmanager);
        linearlayoutmanager.setorIEntation(linearlayoutmanager.VERTICAL);
        initializeData();
        return vIEw;
    }

    public  voID initializeData() {
        FeedService = APIUtils.getFeedService();
        FeedService.getFeeds(AuthenticationToken()).enqueue(new Callback<List<Feed>>() {
            @OverrIDe
            public voID onResponse(Call<List<Feed>> call,Response<List<Feed>> response) {
                if (response.isSuccessful()) {
                    if (response != null) {
                        Feeds = new ArrayList<>(response.body());
                        if(Feeds.isEmpty()){
                            noDataTextVIEw.setVisibility(VIEw.VISIBLE);
                        }
                        else {
                            FeedRecyclerVIEwAdapter = new FeedRecyclerVIEwAdapter(getActivity(),Feeds);
                            recyclerVIEw.setAdapter(FeedRecyclerVIEwAdapter);
                        }
                    }

                } else {
                    Toast.makeText(getContext(),"Unauthorized",Toast.LENGTH_LONG).show();
                }
            }

            @OverrIDe
            public voID onFailure(Call<List<Feed>> call,Throwable t) {
                Toast.makeText(getContext(),t.getMessage(),Toast.LENGTH_LONG).show();
            }
        });
    }

    private String AuthenticationToken() {
        PrefManager prefManager = new PrefManager(getContext());
        return prefManager.Authorization();
    }

    private String getRole() {
        PrefManager prefManager = new PrefManager(getContext());
        return prefManager.getRole();
    }


}

这是我的适配器类。

public class FeedRecyclerVIEwAdapter extends RecyclerVIEw.Adapter<FeedRecyclerVIEwAdapter.FeedVIEwHolder> {
    private ArrayList<Feed> Feeds;
    private Context context;
    FeedService FeedService;
    ProfileService profileService;

    public FeedRecyclerVIEwAdapter(Context context,ArrayList<Feed> Feeds) {
        this.Feeds = Feeds;
        this.context = context;
    }


    public static class FeedVIEwHolder extends RecyclerVIEw.VIEwHolder {
        CardVIEw FeedCardVIEw;
        TextVIEw textVIEwTitle,textVIEwDescription,textVIEwPostBy,textVIEwPostDate,textVIEwMobile;
        TextVIEw textVIEwOption;
        ImageVIEw imageVIEw,callbuttonVIEw;

        public FeedVIEwHolder(@NonNull @NotNull VIEw itemVIEw) {
            super(itemVIEw);
            FeedCardVIEw = itemVIEw.findVIEwByID(R.ID.FeedCardVIEw);
            imageVIEw=itemVIEw.findVIEwByID(R.ID.user_photo);
            callbuttonVIEw=itemVIEw.findVIEwByID(R.ID.callbutton);
            textVIEwTitle = itemVIEw.findVIEwByID(R.ID.FeedTitle);
            textVIEwDescription = itemVIEw.findVIEwByID(R.ID.FeedDescription);
            textVIEwPostBy = itemVIEw.findVIEwByID(R.ID.postBy);
            textVIEwPostDate = itemVIEw.findVIEwByID(R.ID.posDate);
            textVIEwMobile = itemVIEw.findVIEwByID(R.ID.mobile);
            textVIEwOption = itemVIEw.findVIEwByID(R.ID.three_dot);
        }
    }

    @NonNull
    @NotNull
    @OverrIDe
    public FeedRecyclerVIEwAdapter.FeedVIEwHolder onCreateVIEwHolder(@NonNull @NotNull VIEwGroup parent,int vIEwType) {
        VIEw vIEw = LayoutInflater.from(parent.getContext()).inflate(R.layout.Feed_custom_layout,parent,false);
        FeedVIEwHolder fvh = new FeedVIEwHolder(vIEw);
        return fvh;
    }

    @OverrIDe
    public voID onBindVIEwHolder(@NonNull @NotNull FeedVIEwHolder holder,int position) {
        final long itemID = Feeds.get(position).getID();
        final String profilePicname=Feeds.get(position).getUser().getProfile().getProfilePic();
        profileService= APIUtils.getProfileService();
        profileService.loadProfile(AuthenticationToken(),profilePicname).enqueue(new Callback<ResponseBody>() {
            @OverrIDe
            public voID onResponse(Call<ResponseBody> call,Response<ResponseBody> response) {
                System.out.println(response.code());
                if(response.isSuccessful()){
                    try {
                        byte[] bytes=response.body().bytes();
                        Bitmap bitmap= BitmapFactory.decodeByteArray(bytes,bytes.length);
                        GlIDe.with(context).asBitmap()
                                .load(bitmap)
                                .apply(Requestoptions.diskCacheStrategyOf(diskCacheStrategy.ALL))
                                .placeholder(R.drawable.account_circle).into(holder.imageVIEw);
                    } catch (IOException e) {
                        e.printstacktrace();
                    }


                }
                else{
                    Toast.makeText(context,"Load Failed",Toast.LENGTH_LONG).show();
                }
            }

            @OverrIDe
            public voID onFailure(Call<ResponseBody> call,Throwable t) {
                Toast.makeText(context,Toast.LENGTH_LONG).show();

            }
        });
        holder.textVIEwTitle.setText(Feeds.get(position).getFeedTitle());
        holder.textVIEwDescription.setText(Feeds.get(position).getFeedDescription());
        holder.textVIEwPostBy.setText(Feeds.get(position).getUser().getFullname());
        holder.textVIEwPostDate.setText(Feeds.get(position).getPostDate());
        holder.textVIEwMobile.setText(Feeds.get(position).getUser().getMobile());
        holder.callbuttonVIEw.setonClickListener(v -> {
            String phone=Feeds.get(position).getUser().getMobile();
            String dialCall="tel:"+phone;
            Intent intent=new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse(dialCall));
            context.startActivity(intent);
        });

        ItemAnimation.animateFadeIn(holder.itemVIEw,position);
        if(getRole().equals("RolE_admin")){
            holder.textVIEwOption.setonClickListener(v -> {
                PopupMenu popupMenu = new PopupMenu(context,holder.textVIEwOption);
                popupMenu.inflate(R.menu.update_delete_menu);
                popupMenu.setonMenuItemClickListener(item -> {
                    switch (item.getItemID()) {
                        case R.ID.popup_update:
                            AlertDialog.Builder builder= new AlertDialog.Builder(v.getContext());
                            builder.setTitle(R.string.dialog_Feed_update_Title);
                            builder.setPositivebutton(R.string.dialog_yes,(dialog,which) -> {
                                Intent intent = new Intent(context,FeedUpdateActivity.class);
                                intent.putExtra("FeedID",itemID);
                                context.startActivity(intent);

                            });
                            builder.setNegativebutton(R.string.dialog_no,which) -> {
                                Toast.makeText(context.getApplicationContext(),"Canceled",Toast.LENGTH_LONG).show();
                            });
                            builder.create().show();
                            break;
                        case R.ID.popup_delete:
                            AlertDialog.Builder builder1 = new AlertDialog.Builder(v.getContext());
                            builder1.setTitle(R.string.dialog_delete_Title);
                            builder1.setPositivebutton(R.string.dialog_yes,which) -> {
                                FeedService = APIUtils.getFeedService();
                                FeedService.deleteFeed(itemID,AuthenticationToken()).enqueue(new Callback<ResponseBody>() {
                                    @OverrIDe
                                    public voID onResponse(Call<ResponseBody> call,Response<ResponseBody> response) {
                                        if (response.isSuccessful()) {
                                            Toast.makeText(context.getApplicationContext(),"Deleted",Toast.LENGTH_LONG).show();
                                            notifyDataSetChanged();
                                        } else {
                                            Toast.makeText(context.getApplicationContext(),"Delete Failed",Toast.LENGTH_LONG).show();
                                        }

                                    }

                                    @OverrIDe
                                    public voID onFailure(Call<ResponseBody> call,Throwable t) {
                                        Toast.makeText(context.getApplicationContext(),Toast.LENGTH_LONG).show();
                                    }
                                });

                            });
                            builder1.setNegativebutton(R.string.dialog_no,Toast.LENGTH_LONG).show();
                            });
                            builder1.create().show();
                            break;
                    }
                    return false;
                });
                popupMenu.show();
            });
        }
        else{
            holder.textVIEwOption.setVisibility(VIEw.GONE);
        }

    }

    @OverrIDe
    public voID onAttachedToRecyclerVIEw(@NotNull RecyclerVIEw recyclerVIEw) {
        super.onAttachedToRecyclerVIEw(recyclerVIEw);
    }

    @OverrIDe
    public int getItemCount() {
        return Feeds.size();
    }

    private String AuthenticationToken() {
        PrefManager prefManager = new PrefManager(context.getApplicationContext());
        return prefManager.Authorization();
    }

    private String getRole() {
        PrefManager prefManager = new PrefManager(context.getApplicationContext());
        return prefManager.getRole();
    }
    }

这里我调用了 notifyDataSetChange。但是它无法刷新 Fragment 类中设置的 arrayList。在 Adapter 类中完成删除后,如何刷新片段中的 arrayList

解决方法

您可以使用 DiffUtil 将数据加载到 recyclerview 适配器中。对于点击侦听器,您可以在片段本身中实现该方法(在适配器类中创建接口,在片段中实现方法,并将接口的实例传递给适配器的构造函数)。现在,您可以通过更改原始列表来任意操作数据。

大佬总结

以上是大佬教程为你收集整理的删除项目后如何重新加载/刷新 RecyclerView全部内容,希望文章能够帮你解决删除项目后如何重新加载/刷新 RecyclerView所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: