【问题标题】:Can I change a button visibility in a recyclerview only in one of cardview when gps data change当gps数据更改时,我可以仅在一个cardview中更改recyclerview中的按钮可见性吗
【发布时间】:2019-07-23 21:30:31
【问题描述】:

我有一个recyclerView 和 5 个cardView。每个cardview 中有三个按钮。 此按钮之一不可见,并且当 GPS 数据更改时,仅在一个 cardview 中可见。 我的问题是我做不到。

我尝试了一些方法。一个是:

    public void onLocationChanged(Location currentLocation) {
        double latitude = currentLocation.getLatitude();
        double longitude = currentLocation.getLongitude();

        float[] results = new float[1];

        for (int i = 1; i < list_count; i++) {
            Location.distanceBetween(oldLat[i], oldLng[i],
                    latitude, longitude, results);
            if (results[0] < 30) {
                visible[i] = true;

            } else {
                visible[i] = false;
            }
         adapter.notifyItemChanged(i);
         //  adapter.notifyDataSetChanged();
        }
                }

另一种方式是:

      public void onBindViewHolder(@NonNull final CustomAdapter.MyViewHolder holder, final int listPosition) {

        final Button buttonPresent = holder.buttonPresent;
        final Button buttonAbsent = holder.buttonAbsent;
        final Button buttonGeo = holder.buttonGeo;

        if (listPosition > -1) {
            if (visible[listPosition]) {
                buttonGeo.setVisibility(View.GONE);
            } else {
                buttonGeo.setVisibility(View.INVISIBLE);
            }
        }

        adapter.notifyItemChanged(i);
         //  adapter.notifyDataSetChanged();
        }
}

recyclerView 中所有 buttonGeo 的默认状态为 INVISIBLE。当到达一个位置时,与其相关的按钮必须仅对一个 cardView 可见。 但我无法更改按钮可见性和所有按钮不可见。我该如何解决这个问题?请原谅我的英语。

【问题讨论】:

    标签: android button android-recyclerview android-cardview


    【解决方案1】:

    您的代码中有几个错误,可能是错误的副本,但不仅如此。

    首先,将onBindViewHolder中的adapter.notifyItemChanged(i)adapter.notifyDataSetChanged()这行打掉,没有意义。

    另外,我猜buttonGeo. buttonGeo.setVisibility(1) 如果复制不好,因为这样,代码无法编译。

    您的循环忘记了列表或数组的第一个元素。写for (int i = 0; i &lt; student_count; i++)而不是for (int i = 1; i &lt; student_count; i++)

    否则我看不出有什么问题,只检查“结果”和可见[i] 都很好 `

    【讨论】:

    • 坦克,你说得对,因为我之前写过代码。数组的第一个元素为空,代码工作正常。我的问题是如何在 recyclerView 中更改按钮属性,包括可见性和背景等。
    • 我真的不知道为什么它不起作用。使用断点检查 onBindViewHolder 在截获位置时再次调用。也许你应该把条件放在 CustomAdapter.MyViewHolder
    • 是 onBindViewHolder 正在调用并且 buttonGeo.setVisibility(View.GONE);运行但未生效!
    【解决方案2】:

    终于解决了我的问题。 我在onBindViewHolder 中使用以下代码:

       public void onBindViewHolder(@NonNull final CustomAdapter.MyViewHolder holder, final int listPosition) {
    
        final Button buttonPresent = holder.buttonPresent;
        final Button buttonAbsent = holder.buttonAbsent;
        final Button buttonGeo = holder.buttonGeo;
    
        if (listPosition > -1) {
            if (visible[listPosition]) {
                buttonGeo.setVisibility(View.VISIBLE);
            } else {
                buttonGeo.setVisibility(View.INVISIBLE);
            }
        }
        }
       }
    

    buttonGeo.setVisibility(View.GONE); 不起作用。

    【讨论】:

      猜你喜欢
      • 2020-09-11
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2022-09-25
      • 2016-09-18
      • 2019-08-14
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多