从recyclerview的适配器

时间:2015-12-24 20:42:52

标签: android android-fragments fragment android-recyclerview rx-java

大家好我正在尝试从recycler视图适配器类访问片段的几个方法和变量(包含一个回收器视图)。最简单的方法是将片段引用与创建它的适配器一起传入。但我不认为传递完整的适配器引用创建适配器是一个很好的方法。

我在我的项目中使用RxJava并尝试使用PublishSubject做很多事情,比如在适配器中创建一个Subject,调用它执行事件的onNext并在片段中订阅该主题,但它没有用完.. < / p>

所以任何好的方法都会受到高度赞赏。

... TIA

2 个答案:

答案 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.从适配器

调用接口方法

这样你就可以在片段和适配器之间进行通信。