我使用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()
吗?
我看你已经在用Butterknife了。也许你也可以找到杰克·沃顿的RxBinding。他的RxTextView可能是你正在寻找的