Почему bind вызывается в моем RecyclerView, когда я нажимаю кнопку в первый раз? - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть RecyclerView, где каждый ViewHolder содержит вложенную линейную компоновку с некоторыми TextViews и кнопкой. (Кнопка Facebook ShareButton, но я вижу то же поведение с обычным Button.) Когда я нажимаю один раз ShareButton, ничего не происходит. Когда я нажимаю на нее снова, она успешна.

Некоторые подсказки:

  1. В других ответах на stackoverflow говорится, чтобы установить для кнопок focusable и focusableInTouchMode значение false - в моем случае это ничего не изменило.
  2. Используя некоторые операторы печати, я вижу, что при первом нажатии кнопки снова вызывается bind для каждого ViewHolder.
  3. Если я сверну приложение, а затем снова открою его, первый щелчок сработает.

Соответствующий bind код ниже:

public void bind(Plaque plaque) {
    Log.d(TAG, "BINDING!");

    LinearLayout layout = (LinearLayout) itemView;
    layout.setDrawingCacheEnabled(true);
    layout.buildDrawingCache();
    Bitmap map = layout.getDrawingCache();

    SharePhoto photo = new SharePhoto.Builder()
            .setBitmap(map)
            .build();
    SharePhotoContent content = new SharePhotoContent.Builder()
            .addPhoto(photo)
            .build();
    mShareButton.setShareContent(content);
}

Когда я нажимаю mShareButton в первый раз, он просто вызывает этот код (вызывая оператор печати вверху). Когда я нажимаю на нее снова, она отправляет контент в Facebook, как и положено. Любые идеи, как заставить его работать в первый раз, без повторного вызова bind?

1 Ответ

0 голосов
/ 07 сентября 2018

Я все еще не уверен, почему метод bind вызывался при нажатии моей кнопки.Но я смог избежать этого, переместив всю логику кнопок из метода bind в метод конструктора ViewHolder.Я также переключился на использование ShareDialog в обычном Button, чтобы иметь больше контроля над onClick.

...