使用RxJava将ViewHolder绑定到RecyclerViewAdapter



我使用RxJava将数据推送到ViewHolder,并在ViewHolder中使用RxJava填充TextViews。

但有时textview仍然是空的。我认为这是一个时间问题,但我不知道如何解决它:

这是我的适配器的重要方法:

@Override
public DataEntityViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    final View view = inflater.inflate(R.layout.cell_event, parent, false);
    return new DataEntityViewHolder(view);
}
@Override
public void onBindViewHolder(DataEntityViewHolder holder, int position) {
    final FacebookEvents.DataEntity item = mList.get(position);
    holder.cellDataSubject.onNext(item);
}

这是ViewHolder

public class DataEntityViewHolder extends RecyclerView.ViewHolder {
    @Bind(R.id.textView_cell_event_name)  TextView mTextViewName;
    @Bind(R.id.textView_cell_event_start) TextView mTextViewStart;
    @Bind(R.id.textView_cell_event_end)   TextView mTextViewEnd;
    @NonNull public final PublishSubject<FacebookEvents.DataEntity> cellDataSubject;
    public DataEntityViewHolder(@NonNull final View itemView) {
        super(itemView);
        ButterKnife.bind(this, itemView);
        cellDataSubject = PublishSubject.create();
        bind();
    }
    private void bind() {
        cellDataSubject
                .subscribe(item -> {
                    mTextViewName.setText(item.getName());
                    mTextViewStart.setText(DateUtils.getRelativeTime(item.getStart_time()));
                    mTextViewEnd.setText(DateUtils.getRelativeTime(item.getEnd_time()));
                });
    }
}

我错过什么了吗?

我应该使用BehaviorSubject而不是PublishSubject吗?但是,当我使用BehaviorSubject如何是最好的方法来重置它,如果视图被重用,我看不到旧的内容?

我必须添加.subscribeOn()吗?

或者RxJava不是将数据从适配器推送到ViewHolder的最佳方式?

我看你已经在用Butterknife了。也许你也可以找到杰克·沃顿的RxBinding。他的RxTextView可能是你正在寻找的

相关内容

  • 没有找到相关文章

最新更新