【问题标题】:Best approach to communicate between Fragment/Activity and RecyclerView.Adapter?在 Fragment/Activity 和 RecyclerView.Adapter 之间进行通信的最佳方法?
【发布时间】:2018-01-26 13:27:17
【问题描述】:

我的片段:

public  class FragmentSort extends Fragment {
  @BindView(R.id.sortRecyclerView)
  RecyclerView sortRecyclerView;
  protected RecyclerView.Adapter adapter;

  @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
       View rootView = inflater.inflate(layoutResId, container, false);
       adapter = new StoreListItemAdapter(getActivity(), collection);
       sortRecyclerView.setAdapter((RecyclerView.Adapter) adapter);
       return rootView;
}

     @Subscribe
public void onStoreClickEvent(Store store) {
    Debug.d(TAG, "onStoreClickEvent: store = " + store);
    handleFilterItemSelect(store.getAddress());
 }
}

这是我的自定义适配器:

public class StoreListItemAdapter extends RecyclerView.Adapter {
    private Context context;
    private List<?> data = new ArrayList<>();

  public DataBindingRecyclerViewAdapter(Context context, List<?> data) {
        this.context = context;
        this.data = data;
  }

  public void onClick(Store store) {
    EventBus.getDefault().post(store);
  }
}

当单击列表中的某个项目时,调用方法onClick()。 所以我需要我的片段来处理项目的点击。 为此,我使用 EventBus。 点击后我打电话

EventBus.getDefault().post(store);

作为片段调用方法的结果:

onStoreClickEvent(Store store)

所以这是我在自定义片段和自定义适配器之间进行通信的模型。

这是工作。很好。

问题是:这是片段和适配器之间通信的最佳方法吗?

附:我的自定义适配器可以通过片段、活动或自定义视图使用。

【问题讨论】:

  • 没有最好的方法。它是基于意见的,因此在 StackOverflow 上是题外话。
  • 我看不出那个 Event 类的目的。为什么不能只传递 store 对象本身?
  • 你说得对,我只能发送 Store 对象。谢谢。我更新了我的帖子。

标签: android android-recyclerview


【解决方案1】:

另一种方法是创建这样的侦听器接口:

public interface OnStoreItemClickListener {

    public void onStoreItemClicked(Store item);    

}

然后,在您的适配器中,您声明一个 OnStoreItemClickListener 类型的字段并为它创建一个 setter 方法。

当您检测到点击时,您只需检查您的侦听器是否已设置并调用onStoreItemClicked() 方法。

你可以在任何你需要的地方通过setter注册一个监听器。

【讨论】:

  • 我认为 EventBus 比创建回调接口更优雅。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2021-07-18
相关资源
最近更新 更多