大家好我正在尝试从recycler视图适配器类访问片段的几个方法和变量(包含一个回收器视图)。最简单的方法是将片段引用与创建它的适配器一起传入。但我不认为传递完整的适配器引用创建适配器是一个很好的方法。
我在我的项目中使用RxJava并尝试使用PublishSubject做很多事情,比如在适配器中创建一个Subject,调用它执行事件的onNext并在片段中订阅该主题,但它没有用完.. < / p>
所以任何好的方法都会受到高度赞赏。
... TIA
答案 0 :(得分:1)
我建议在您的应用中引入EventBus - 应用的不同组件之间非常优雅的沟通方式。
然后它看起来像:
Fragment
:
public class MyFragment extends Fragment {
private EventBus eventBus = EventBus.getDefault();
RecyclerViewAdapter viewAdapter;
@Override
public void onAttach(Context context) {
super.onAttach(context);
eventBus.register(this);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_a, container, false);
if (viewAdapter == null) {
viewAdapter = new RecyclerViewAdapter(eventBus);
}
RecyclerView recyclerView = (RecyclerView)rootView.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(viewAdapter);
return rootView;
}
@SuppressWarnings("unused") // invoked by EventBus
public void onEventMainThread(final DataRefreshedEvent event) {
// Do something!
}
@Override
public void onDetach() {
eventBus.unregister(this);
super.onDetach();
}
}
Adapter
:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
EventBus eventBus;
public RecyclerViewAdapter(EventBus eventBus) {
this.eventBus = eventBus;
}
void sentSomethingToFragment() {
eventBus.post(new DataRefreshedEvent());
}
.....
}
活动:public final class DataRefreshedEvent {}
只是一张纸条 - Dagger,它看起来会更好。
我希望,这有帮助
答案 1 :(得分:1)
我的建议是采用界面方法。 1.创建一个界面。 2.片段应该实现该接口。 3.将该接口引用传递给适配器。 4.从适配器
调用接口方法这样你就可以在片段和适配器之间进行通信。