为什么当我第一次单击按钮时,在我的回收器视图中调用绑定?



我有一个RecyclerView,其中每个ViewHolder都包含一个嵌套的线性布局,带有一些TextViews和一个按钮。(该按钮是FacebookShareButton,但我在常规Button上也看到了相同的行为。当我单击ShareButton一次时,没有任何反应。当我再次单击它时,它成功了。

一些线索:

  1. 堆栈溢出上的其他答案说将按钮的focusablefocusableInTouchMode设置为 false——这在我的情况下没有区别。
  2. 通过使用一些打印语句,我看到第一次单击按钮时,它会在每个ViewHolder上再次调用bind
  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时,它只是调用此代码(触发顶部的 print 语句(。当我再次点击它时,它会将内容发送到Facebook,就像它应该做的那样。 任何想法如何让它第一次工作,而无需再次打电话bind

我仍然不确定为什么在单击我的按钮时调用bind方法。但是我能够通过将所有按钮逻辑从bind方法移到ViewHolder构造函数方法中来避免这种情况。我还改用在常规Button中使用ShareDialog,以便我可以更好地控制onClick

最新更新