2017-08-30 8 views
0

です。動的に作成されたImageViewのIDをリストに格納しようとしていますが、その後は常に-1と表示されます。動的に作成されたImageViewのIDは常に-1

ImageView image = new ImageView (this); 
image.getId(); 
+3

これはまさに予想通りです。 'View'はあなたのコードやレイアウトXMLのいずれかにIDを割り当てない限り、IDを持っていません。 '-1'は' View.NO_ID'です。 –

+1

ありがとう、それは、私が作成したImageViewのユニークなIDの作成を管理しなければならないのか、それともアンドロイドAPIがそれを回避するのかということですか? –

+0

おそらく。あなたの必要に応じて。 'View'への参照を他の方法、例えば配列やリストなどに保存しておけば、それらのIDを必ずしも割り当てる必要はありません。あなたが 'findViewById()'を使う必要があるか、そうでなければIDだけで 'View'を区別しなければならない状況にいるなら、階層内でそれらが一意であることを確認する必要があります心配している。 –

答えて

2

この動作は、IDを設定していない場合に発生します。動的に追加されたビューを識別するには、タグおよび/またはIDを設定することによって2つの方法があります。

タグ。

image.setTag("DynamicImage"); 

//somewhere else in the code to find this view (use rootView if fragment else its fine with just findViewWithTag method) 

ImageView image = rootView.findViewWithTag("DynamicImage"); 

ID。

image.setId(CONSTANT_ID_VALUE); 

//somewhere else in the code to find this view (use rootView if fragment else its fine with just findViewWithTag method) 
ImageView image = rootView.findViewById(CONSTANT_ID_VALUE); 
1

id - 一意の名前です。取得する前に追加する必要があります。また、すべてのid-sとリソースはR.classの単なる定数(int)であることも知っておく必要があります。したがって、idが追加されない場合は-1になります。

0

通常、IDはレイアウトに割り当てられた値です。プログラムでビューを作成するときには、image.setId()を割り当てる必要があります。あなたはそうのような、View.generateViewId()を使用していないを生成することがありました:

image.setId(View.generateViewId()); 

ていることに注意してくださいView.generateViewId()がAPI以降17+からのみ存在するが。

2

APIレベル17以上では、View.generateViewId()を呼び出してView.setId(int)を使用して設定できます。

関連する問題