【问题标题】: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 一次时,没有任何反应。当我再次点击它时,它是成功的。

一些线索:

  1. stackoverflow 上的其他答案说将按钮的 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 时,它只会调用此代码(触发顶部的打印语句)。当我再次单击它时,它会将内容发送到 Facebook,就像它应该做的那样。 任何想法如何让它第一次工作,而无需再次致电bind

【问题讨论】:

  • 这个方法在哪里调用? ViewHolder - itemView.setOnClickListener() 还是在 BindViewHolder() 中?
  • 它是RecyclerView.ViewHolder 的一部分。它不属于onBindViewHolder,也不属于onClicksetOnClickListener

标签: android android-recyclerview facebook-sdk-4.0 share-button


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 2018-10-19
    • 2016-01-27
    相关资源
    最近更新 更多