【问题标题】:Make View Visible or Gone in adapter on ClickListener在 ClickListener 上的适配器中使视图可见或消失
【发布时间】:2020-02-13 10:30:29
【问题描述】:

我在我的应用程序中显示了一个 recyclerview,我希望当用户单击 recyclerview 项目时,一个隐藏的视图应该对他可见,并且在单击该项目时它应该消失。 我的代码:

 holder.parentView.setOnClickListener(v -> {
                    if (viewVisibiltyCheck) {
                        holder.expandView.setVisibility(View.VISIBLE);
                        viewVisibiltyCheck = false;
                    } else {
                        viewVisibiltyCheck = true;
                        holder.expandView.setVisibility(View.GONE);
                    }

                });

我正在使用 Firebase Recycler。我有一个布尔检查,当我单击列表中的哪个项目的真实视图变得可见时,我将布尔值设为 false。现在,如果我单击同一个项目,它将正常工作并隐藏视图,但是如果我要单击列表中的任何其他项目且第一个视图可见,我必须双击该项目,因为第一次单击它将使布尔值为真,因为当我单击第一个项目列表然后第二次单击时它会变为假给我看风景。

有什么逻辑我可以通过单击完成所有操作吗?谢谢

【问题讨论】:

    标签: android android-recyclerview firebaseui onitemclicklistener


    【解决方案1】:

    你根本不需要那个 viewVisibilityCheck。

    holder.parentView.setOnClickListener(v -> {
                        if (holder.expandView.getVisibility() == View.GONE) {
                            holder.expandView.setVisibility(View.VISIBLE);
                        } else {
                            holder.expandView.setVisibility(View.GONE);
                        }
                });
    

    【讨论】:

    • 感谢伙计,我发现了什么,我不记得那句话了。
    【解决方案2】:

    如果我理解正确,您的问题是 viewVisibiltyCheck 值未连接到您单击的正确项目。如果是这种情况,只需将viewVisibiltyCheck 设置为holder 的属性,这样您就可以像expandView 一样访问它。

    所以可能是这样的:

    holder.parentView.setOnClickListener(v -> {
                        if (holder.viewVisibiltyCheck) {
                            holder.expandView.setVisibility(View.VISIBLE);
                            holder.viewVisibiltyCheck = false;
                        } else {
                            holder.viewVisibiltyCheck = true;
                            holder.expandView.setVisibility(View.GONE);
                        }
    
                    });
    

    编辑: 你需要把它放在你创建持有者和它的视图的地方,比如expandView。通过这种方式,您可以将各种参数与视图相关联,但布鲁斯回答可能在您的情况下更容易。

    public class MyViewHolder extends RecyclerView.ViewHolder {
        View expandView;
        boolean viewVisibiltyCheck;
    
        public MyViewHolder(View itemView) {
            super(itemView);
             /* your code */
            viewVisibiltyCheck = false;
        }
    

    【讨论】:

    • 我应该如何将 viewVisibiltyCheck 设置为持有者的属性?您刚刚从问题中粘贴
    • 我不认为我们可以这样做 viewVisibiltyCheck 只是一个布尔值。谢谢你的时间
    • 在哪里创建持有者及其视图,例如 expandView。通过这种方式,您可以将各种参数与视图相关联,但布鲁斯回答可能在您的情况下更容易。 public class MyViewHolder extends RecyclerView.ViewHolder { View expandView; boolean viewVisibiltyCheck; public MyViewHolder(View itemView) { super(itemView); /* your code */ viewVisibiltyCheck = false; }
    • 好吧,我明白你的意思了,我们也可以这样做,但布鲁斯的逻辑正如你所说的那样简单。谢谢
    猜你喜欢
    • 2021-11-29
    • 2018-07-15
    • 1970-01-01
    • 2015-04-17
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多