当 gps 数据更改时,我可以仅在 cardview 之一中更改 recyclerview 中的按钮可见性吗

Can I change a button visibility in a recyclerview only in one of cardview when gps data change

我有一个 recyclerView 和 5 cardView。每个 cardview 中有三个 Button。 其中一个按钮不可见,当 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 的默认状态都是不可见的。当到达一个位置时,与其相关的按钮必须仅对一个 cardView 可见。 但我无法更改按钮可见性和所有按钮不可见。我该如何解决这个问题?请原谅我的英语。

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

首先把onBindViewHolder中的adapter.notifyItemChanged(i)或者adapter.notifyDataSetChanged()行打掉,那是没有意义的

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

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

否则我看不出有什么问题,只是检查 "results" 和 visible[i] 都很好 `

终于解决了我的问题。 我在 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); 不起作用。