2
我使用RxJava将数据推送到ViewHolder和ViewHolder内部我使用RxJava填充TextViews。使用RxJava将ViewHolder绑定到RecyclerViewAdapter
但是有时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
是如何在b最好的方式来重置它,如果视图重用,我没有看到旧的内容?
我需要添加.subscribeOn()
吗?
或者是RxJava不是将数据从适配器推送到ViewHolder的最佳方式?
我会给他们一个尝试:-) –