![](/img/trans.png)
[英]Android RecyclerView - IndexOutOfBounds exception in onBindViewHolder
[英]Android RecyclerView and onBindViewHolder
我在每個項目上都有一個TextView,並在holder.item_edit_text.addTextChangedListener
上添加了holder.item_edit_text.addTextChangedListener
以onBindViewHolder
一長串列表,以及一個在片段級別計算總數的接口,但是當用戶在一個視圖上onBindViewHolder
時,很奇怪,在多個項目上調用了onBindViewHolder
。 IE瀏覽器,如果用戶輸入5,我得到5的倍數,這取決於回收(列表中的項目數),例如15或25
RECYCLERVIEW onBindViewHolder
holder.item_edit_text.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence amount, int start, int before, int count) {
calculateTotal.onAmountAdded(current, amount.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
@Override
public int getItemCount() {
if (Accounts != null) {
return Accounts.size();
}
return 0;
}
問題是我如何確保onBindViewHolder
在recyclerview中為一項調用onBindViewHolder
片段
@Override
public void onAmountAdded(Account account, String amount) {
private Map<Account, String> orderItems = new HashMap<>();
if (amount.length() < 9) {
orderItems.put(account, amount);
int newTotal = 0;
Iterator iterator = orderItems.entrySet().iterator();
while (iterator.hasNext()) {
try {
Map.Entry mentry = (Map.Entry) iterator.next();
newTotal += Integer.parseInt(mentry.getValue().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
text_total.setText(ValidationUtil.formatNumber(String.valueOf(newTotal)));
return;
}
}
我想沒有足夠的信息。
而不是在viewBinder上添加TextWatcher
將其添加到您的ViewHolder類中
class ViewHolder extends RecyclerView.ViewHolder {
private TextView item_edit_text;
ViewHolder(View itemView) {
super(itemView);
item_edit_text = itemView.findViewById(R.id.item_edit_text);
item_edit_text.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence amount, int start, int before, int count) {
//not sure why this current variable is for
//if its current Account
Accounts current = Accounts.get(getLayoutPosition());
calculateTotal.onAmountAdded(current, amount.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.