У меня 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();
}
}
Состояние по умолчанию для всех buttonGeo в recyclerView — INVISIBLE. когда достигнуто одно местоположение, кнопка, связанная с ним, должна быть ВИДИМОЙ только для одного представления карты. Но я не могу изменить видимость кнопки, и все кнопки невидимы. Как решить эту проблему? Простите меня за мой английский.
у вас есть несколько ошибок в коде, возможно неудачная копия, но не только.
Во-первых, убрать строку adapter.notifyItemChanged(i)
или adapter.notifyDataSetChanged()
в onBindViewHolder, это не имеет смысла.
Кроме того, я думаю, что buttonGeo. buttonGeo.setVisibility(1)
если плохая копия, так как код не может скомпилироваться.
Ваш цикл забыл первый элемент списка или массива. Пишите for (int i = 0; i < student_count; i++)
вместо for (int i = 1; i < student_count; i++)
В остальном я не вижу ничего плохого, просто проверьте "результаты" и visible[i] в порядке `
Я действительно не знаю, почему это не работает. Проверьте с помощью точки останова, что onBindViewHolder снова вызывается при перехвате местоположения. Возможно, вам следует поставить условие в CustomAdapter.MyViewHolder
да onBindViewHolder вызывает и buttonGeo.setVisibility(View.GONE); работает, но не осуществляется!
наконец-то я решаю свою проблему.
Я использую следующий код в 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);
не работают.
Tanks, Вы правы, потому что я написал предыдущий код. Первый элемент массива пуст и код работает корректно. Мой вопрос заключается в том, как изменить свойство кнопки, включая видимость, фон и т. д. в recyclerView.