2015-08-28 62 views
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的最佳方式?

回答

0

我看到你已经在使用Butterknife。也许你可以找到JakeWharton有用的RxBinding。 他的RxTextView可能是你在找什么。

+0

我会给他们一个尝试:-) –