如何从ButterKnife注入的有界视图列表中删除项目?

时间:2016-10-05 13:38:49

标签: android butterknife

我有一个通过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)

请注意。我不想停用视图。我想删除

2 个答案:

答案 0 :(得分:0)

我想你想从屏幕上删除视图,而不是列表。 为此,您可以使用setVisibility

隐藏它
((ViewGroup) labels.get(4).getParent()).removeView(labels.get(4));

该列表仅包含指向实际视图的指针。我认为你得到了例外,因为ButterKnife返回的列表中没有实现“删除”。

  • 如果我在哪里,我不会将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);
相关问题