为啥在我第一次单击按钮时在我的 RecyclerView 中调用绑定?
Posted
技术标签:
【中文标题】为啥在我第一次单击按钮时在我的 RecyclerView 中调用绑定?【英文标题】:Why is bind being called in my RecyclerView when I click a button for the first time?为什么在我第一次单击按钮时在我的 RecyclerView 中调用绑定? 【发布时间】:2018-09-06 05:56:42 【问题描述】:我有一个RecyclerView
,其中每个ViewHolder
都包含一个嵌套的线性布局,其中包含一些TextViews
和一个按钮。 (该按钮是 Facebook ShareButton
,但我也看到与常规 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
时,它只会调用此代码(触发顶部的打印语句)。当我再次单击它时,它会将内容发送到 Facebook,就像它应该做的那样。
任何想法如何让它第一次工作,而无需再次致电bind
?
【问题讨论】:
这个方法在哪里调用? ViewHolder - itemView.setOnClickListener() 还是在 BindViewHolder() 中? 它是RecyclerView.ViewHolder
的一部分。它不属于onBindViewHolder
,也不属于onClick
或setOnClickListener
。
【参考方案1】:
我仍然不确定为什么单击我的按钮时会调用 bind
方法。但是我可以通过将所有按钮逻辑移出bind
方法并移入 ViewHolder 构造方法来避免这种情况。我还切换到在常规Button
中使用ShareDialog
,以便我可以更好地控制onClick
。
【讨论】:
以上是关于为啥在我第一次单击按钮时在我的 RecyclerView 中调用绑定?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我只能在我的 android 通知中按一次播放/暂停按钮?
为啥我的 TabBar 按钮在我第一次加载视图控制器时被禁用?
我们如何在按钮单击时在 pyqt 中打开特定于选项卡的选项卡?