2016-10-05 7 views
0

私はButterKnifeButterKnifeによって注入されたビューの限定リストからアイテムを削除するには?

@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

@ColdFire私は、ワンショットオブジェクトのような役割を果たすクラスのバインディングを使用します。 この9つのビューは、表3x3として表示されます。そして、場合によっては、4,5項目を除いて、すべてを記入する必要があります。さもなければ4,5は却下されるべきです。 Strategyパターンでコードを飛び回るのは本当に好きではありません:( –

+0

'AbstractList.remove'と' List.remove'のドキュメントread: "このリストの指定された位置にある要素を削除します**(オプションのオペレーション)**あなたはその操作に頼ることはできません。 – gus27

答えて

0

私はあなたが画面ではなく、一覧からビューを削除すると思います。 はそれを行うには、リストは、実際のビューへのポインタのみが含まれていsetVisibility

((ViewGroup) labels.get(4).getParent()).removeView(labels.get(4)); 

使用してそれを隠すことができます。私はあなたが "削除"がリストに実装されていないため、例外を取得すると思いますButterKnifeが返されました。

  • 私はどこにいても、これらの特定のビューにはButterKnifeを使用しません。または、自分のアクティビティで別のフィールドを作成しません。
0

私は、の注釈では、Listと異なるタイプを許可していないと思います。おそらく、あなたがやって試すことができます:原因AbstractList

@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; 

UnsupportedOperationExceptionList実装は削除を行うことができますinteratorを持っていない場合は、削除する要素をサポートしていません。また、最初に実装するためにキャストして要素を削除することもできます。

((ArrayList)labels).remove(4); 
((ArrayList)labels).remove(5); 
関連する問題