我的片段:
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)
所以这是我在自定义片段和自定义适配器之间进行通信的模型。
这是工作。细
问题是:这是片段和适配器之间通信的最佳方法吗?
P.S。我的自定义适配器可以通过片段,活动或自定义视图使用。
答案 0 :(得分:0)
另一种方法是创建一个这样的监听器接口:
public interface OnStoreItemClickListener {
public void onStoreItemClicked(Store item);
}
然后,在您的适配器中,声明一个类型为OnStoreItemClickListener
的字段,并为其创建一个setter方法。
当您检测到点击时,只需检查您的听众是否已设置并调用onStoreItemClicked()
方法。
您可以通过设置器在任何需要的地方注册听众。