Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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
Java Recycerview更改错误的项目_Java_Android - Fatal编程技术网

Java Recycerview更改错误的项目

Java Recycerview更改错误的项目,java,android,Java,Android,这是我的recyclerview适配器类 public class WebsiteAdapter extends RecyclerView.Adapter<WebsiteAdapter.WebsiteHolder> { private List<Website> websites = new ArrayList<>(); private WebsiteViewModel websiteViewModel; WebsiteAda

这是我的recyclerview适配器类

    public class WebsiteAdapter extends RecyclerView.Adapter<WebsiteAdapter.WebsiteHolder> {
    private List<Website> websites = new ArrayList<>();
    private WebsiteViewModel websiteViewModel;

    WebsiteAdapter(WebsiteViewModel viewModel){
        this.websiteViewModel = viewModel;
    }


    @NonNull
    @Override
    public WebsiteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.website_item, parent, false);
        return new WebsiteHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull final WebsiteHolder holder, final int position) {
        final Website currentWebsite = websites.get(position);
        final Boolean bookmarkStatus = currentWebsite.getFavourite();
        final List<WebPage> webPages = websiteViewModel.getRepository().getAllWebPagesForWebsite(currentWebsite.getWebsite_id());

        holder.textViewTitle.setText(currentWebsite.getWebsiteName());

        if(currentWebsite.getDescription() != null){
            holder.textViewDescription.setText(currentWebsite.getDescription());
            holder.textViewDescription.setVisibility(View.VISIBLE);
        }

        if(webPages!=null && !webPages.isEmpty()) {
            holder.secondaryAdapter.setWebPages(webPages);
            holder.expandCollapse.setVisibility(View.VISIBLE);
        }

        if(bookmarkStatus){
            holder.isBookmarked = true;
            holder.bookmarkButton.setBackgroundResource(R.drawable.ic_bookmark_24px);
        } else {
            holder.isBookmarked = false;
            holder.bookmarkButton.setBackgroundResource(R.drawable.ic_bookmark_border_24px);
        }

        holder.cardViewWebsite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String websiteUrl = currentWebsite.getWebsite_url();
                System.out.println("Description =  " + currentWebsite.getDescription() + ", boomarked : " + currentWebsite.getFavourite());
                List<WebPage> webPages = websiteViewModel.getRepository().getAllWebPagesForWebsite(currentWebsite.getWebsite_id());
                for(WebPage webPage : webPages){
                    System.out.println("Web pages: ");
                    System.out.println(webPage.toString() + ", ");
                }

                launchWebsite(v.getContext(), websiteUrl);
            }
        });

        holder.bookmarkButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("Website bookmarked before click : " + bookmarkStatus + ", Description is : " + currentWebsite.getDescription());
                currentWebsite.setFavourite(!bookmarkStatus);
                System.out.println("Website bookmark clicked, status has been set to : " + currentWebsite.getFavourite());
                websiteViewModel.getRepository().websiteDao.updateWebsite(currentWebsite);
                notifyItemChanged(position);
            }
        });
    }

    private void launchWebsite(Context context, String URL) {
        CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
        builder.setStartAnimations(context, R.anim.push_off_screen_left, R.anim.push_onto_screen_from_right);
        builder.setExitAnimations(context, R.anim.push_onto_screen_from_left, R.anim.push_off_screen_right);
        CustomTabsIntent customTabsIntent = builder.build();
        customTabsIntent.launchUrl(context,Uri.parse(URL));
    }

    @Override
    public int getItemCount() {
        return websites.size();
    }

    public void setWebsites(List<Website> websites) {
        this.websites = websites;
        notifyDataSetChanged();
    }

    class WebsiteHolder extends RecyclerView.ViewHolder {
        private TextView textViewTitle;
        private TextView textViewDescription;
        private CardView cardViewWebsite;
        private boolean isBookmarked; // ALSO FAVOURITED
        private boolean isExpanded = false;
        private Button expandCollapse;
        private Button bookmarkButton;
        private SecondaryAdapter secondaryAdapter;
        private RecyclerView childRecyclerView;
    public WebsiteHolder(View itemView) {
        super(itemView);
        textViewTitle = itemView.findViewById(R.id.text_view_title);
        textViewDescription = itemView.findViewById(R.id.text_view_description);
        cardViewWebsite = itemView.findViewById(R.id.cardViewWebsite);
        bookmarkButton = itemView.findViewById(R.id.bookmarkButton);
        childRecyclerView = itemView.findViewById(R.id.childRecyclerview);
        expandCollapse = itemView.findViewById(R.id.expandCollapse);

        expandCollapse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isExpanded) {
                    collapseView();
                } else {
                    expandView();
                }
            }
        });

        childRecyclerView.setLayoutManager(new LinearLayoutManager(itemView.getContext(),  LinearLayoutManager.HORIZONTAL, false));
        LayoutAnimationController animation = AnimationUtils.loadLayoutAnimation(itemView.getContext(), R.anim.layout_animation_slide_in);
        childRecyclerView.setLayoutAnimation(animation);
        childRecyclerView.setHasFixedSize(true);
        secondaryAdapter = new SecondaryAdapter();
        childRecyclerView.setAdapter(secondaryAdapter);
    }
    private void collapseView() {
        isExpanded = false;
        childRecyclerView.setVisibility(View.GONE);
    }

    private void expandView() {
        isExpanded = true;
        childRecyclerView.setVisibility(View.VISIBLE);
    }
}
}

我遇到的问题是,当我按下项目A上的书签按钮时:另一个项目上的展开按钮将在不应该的时候出现。B:第二个RecyclerView设置为其他网站。我如何调试这个?有没有什么东西被认为是罪魁祸首?我觉得我把东西放错地方了。非常感谢


多亏了这篇文章,我在bindView方法中添加了一条语句,第二条:添加了ELSE语句来否定if语句。问题已解决:目前:

尝试在OnBinderViewWholder下打印websites.getposition,以确认您得到的结果正确。还有,当它错误地添加书签时,它仅仅是一个书签,还是看起来是随机的?它看起来是随机的,但它是没有其他语句来否定ifs的结果