我有一个通过ButterKnife注入的视图列表
@BindViews({
R.id.legend_txt_SB, R.id.legend_txt_MB, R.id.legend_txt_B_LOW,
R.id.legend_txt_B_HIGH, R.id.legend_txt_Normal, R.id.legend_txt_A_LOW,
R.id.legend_txt_A_HIGH, R.id.legend_txt_MA, R.id.legend_txt_SA
})
List<TextView> labels;
在某些情况下,我需要从此列表中删除4项和5项。我接下来试过了:
if (<expression>) {
labels.get(4).setVisibility(View.GONE);
labels.get(5).setVisibility(View.GONE);
labels.remove(4);
labels.remove(5);
}
并收到错误:
java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:638)
请注意。我不想停用视图。我想删除。
答案 0 :(得分:0)
我想你想从屏幕上删除视图,而不是列表。
为此,您可以使用setVisibility
或
((ViewGroup) labels.get(4).getParent()).removeView(labels.get(4));
该列表仅包含指向实际视图的指针。我认为你得到了例外,因为ButterKnife返回的列表中没有实现“删除”。
答案 1 :(得分:0)
我认为,ButterKnife
注释不允许使用与List
不同的类型。也许你可以尝试:
@BindViews({
R.id.legend_txt_SB, R.id.legend_txt_MB, R.id.legend_txt_B_LOW,
R.id.legend_txt_B_HIGH, R.id.legend_txt_Normal, R.id.legend_txt_A_LOW,
R.id.legend_txt_A_HIGH, R.id.legend_txt_MA, R.id.legend_txt_SA
})
ArrayList<TextView> labels;
如果UnsupportedOperationException
实现没有可以删除的interator,那么由于AbstractList
List
不支持删除元素。您也可以尝试首先使用强制转换删除元素:
((ArrayList)labels).remove(4);
((ArrayList)labels).remove(5);