Могу ли я изменить видимость кнопки в recyclerview только в одном из карт при изменении данных GPS

У меня 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. когда достигнуто одно местоположение, кнопка, связанная с ним, должна быть ВИДИМОЙ только для одного представления карты. Но я не могу изменить видимость кнопки, и все кнопки невидимы. Как решить эту проблему? Простите меня за мой английский.

0
0
130
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

у вас есть несколько ошибок в коде, возможно неудачная копия, но не только.

Во-первых, убрать строку 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] в ​​порядке `

Tanks, Вы правы, потому что я написал предыдущий код. Первый элемент массива пуст и код работает корректно. Мой вопрос заключается в том, как изменить свойство кнопки, включая видимость, фон и т. д. в recyclerView.

mehdi 24.07.2019 04:12

Я действительно не знаю, почему это не работает. Проверьте с помощью точки останова, что onBindViewHolder снова вызывается при перехвате местоположения. Возможно, вам следует поставить условие в CustomAdapter.MyViewHolder

Turvy 24.07.2019 09:49

да onBindViewHolder вызывает и buttonGeo.setVisibility(View.GONE); работает, но не осуществляется!

mehdi 24.07.2019 10:28
Ответ принят как подходящий

наконец-то я решаю свою проблему. Я использую следующий код в 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); не работают.

Другие вопросы по теме