2015-08-28 65 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

我會給他們一個嘗試:-) –