【发布时间】:2017-01-22 00:54:30
【问题描述】:
我希望能够动态地将项目添加到我的 ReclycerView。
当一个项目加载时 -> setText() -> 我在列表中添加另一个项目。
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
final Message message = mDataset.get(position);
if(message.isAnswers()) {
holder.mAnswer1Button.setText(message.getAnswer1());
holder.mAnswer2Button.setText(message.getAnswer2());
holder.mAnswer1Button.setOnClickListener(v -> {
if(message.getChild1() > 0) {
add(position + 1, dataListShared.get(message.getChild1()));
holder.mAnswer1Button.setClickable(false);
holder.mAnswer2Button.setEnabled(false);
}
});
} else {
holder.mMessageTextView.setText(message.getMessage());
if(message.getChild1() > 0) {
add(position + 1, dataListShared.get(message.getChild1()));
holder.mMessageTextView.setEnabled(false);
}
}
}
这就是我在onBindViewHolder 里面的东西。当我在第一个案例if() 上单击按钮时,该项目被添加到列表中。在第二个案例else() 上,我希望在当前项目上设置文本,而不是添加另一个。
我怎样才能做到这一点?
此外,为什么add() 在 onClickListener 内部起作用,而不在它外部起作用?
我得到的错误是:
java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling
谢谢! :)
【问题讨论】:
-
onClickListener 会在很久以后执行,当 View 实际显示并点击时,而 onBindViewHolder() 中的 add() 会在绑定视图时立即调用。
-
另外,还有一个稍后我会尝试的回调,onViewAttachedToWindow()。也许在那里添加代码会有所帮助(我还没有实际测试过)。
-
谢谢大佬,我试试
-
你到底想达到什么目标?
-
我想添加项目(如果布局只有一个 textView 而没有按钮)-> 添加另一个项目(如果布局没有按钮)-> 添加另一个...直到我们得到到将有一个按钮的项目
标签: android android-recyclerview