4

I'm studying MVP style with Android Architecture Blueprints

In this sample, Adapter(RecyclerViewAdapter etc) belongs to View. Fragment means View in MVP and Adapter placed in the View as inner class.

In this case, a communication between View and Adapter was made by using callback interface.

    public TasksAdapter(List<Task> tasks, TaskItemListener itemListener) {
        setList(tasks);
        mItemListener = itemListener;
    }

I often though callback communication is a little confused.

Many reactions in this QA show this matter.

Why doesn't RecyclerView have onItemClickListener()? And how RecyclerView is different from Listview?

public class ReactiveAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    String[] mDataset = { "Data", "In", "Adapter" };

    private final PublishSubject<String> onClickSubject = PublishSubject.create();

    @Override 
    public void onBindViewHolder(final ViewHolder holder, int position) {
        final String element = mDataset[position];

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               onClickSubject.onNext(element);
            }
        });
    }

    public Observable<String> getPositionClicks(){
        return onClickSubject.asObservable();
    }
}

There are some ways on this.

  • Callbacks (callback, listener, and observer)
  • Observable with RxJava
  • PublishSubject with RxJava
  • Event Bus
  • Pass View or Presenter to Adapter's constructor

Which way is correct ? How should I do this?

chanzmao
  • 101
  • 1
  • 6

0 Answers0