我有一个RecyclerView
,其中每个ViewHolder
都包含一个嵌套的线性布局,带有一些TextViews
和一个按钮。(该按钮是FacebookShareButton
,但我在常规Button
上也看到了相同的行为。当我单击ShareButton
一次时,没有任何反应。当我再次单击它时,它成功了。
一些线索:
- 堆栈溢出上的其他答案说将按钮的
focusable
和focusableInTouchMode
设置为 false——这在我的情况下没有区别。 - 通过使用一些打印语句,我看到第一次单击按钮时,它会在每个
ViewHolder
上再次调用bind
。 - 如果我最小化应用程序,然后再次将其拉起,则第一次单击有效。
相关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
。