当 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);
不起作用。
我有一个 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);
不起作用。