ReclycerViewにアイテムを動的に追加できます。RecyclerViewにアイテムを動的に追加する
アイテムがロードするとき - > 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()
にいるとき、ボタンをクリックすると、アイテムがリストに追加されます。 2番目のケースelse()
では、この現在のアイテムにテキストを設定し、既に別のアイテムを追加したいと思います。
どうすればこの問題を解決できますか?
さらに、add()
はなぜonClickListenerの内部で動作しますが、その外側では動作しないのですか?
私が手にエラーがある:
java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling
ありがとう! :)
に
ViewHolder
クラスでonClickListener
mAnswer1Buttonを設定して、このメソッドを呼び出すことにより、Adpater
CLASからこのメソッドonItemClick
を呼び出すことができますonBindViewHolder()内のadd()はビューをバインドするときにただちに呼び出されます。 – Michaまた、後で私が試みるコールバック、onViewAttachedToWindow()があります。たぶんそこにコードを追加すると(私は実際にこれをテストしていない)。 – Micha
ありがとう、私はそれを試してみます –