2016-04-22 71 views
4

view.setTag(t1);を使用してビューにタグを設定し、正しく返されたparent.findViewWithTag(t1);を使用してビューを取得しました。複数のタグを持つビューのAndroid findViewWithTag

私は今、私の意見で、2個の異なるタグを設定する必要があり、私はそれからだTAG1とTAG2は、RES /値/ ids.xml

で宣言されたIDです

view.setTag(R.id.tag1, t1); 
view.setTag(R.id.tag2, t2); 

を使用していることをやっていますタグt1でビューを取得しようとしましたが、parent.findViewWithTag(t1);はnullを返します。私は検索し、タグのキーを受け入れる方法はありませんfindViewWithTagまたは類似しています。

これを達成する方法はありますか?あなたがアンドロイドのドキュメントに記載されているところに私を指摘できない場合は?

この特定のケースでは、タグの1つではなくidを使用できますが、それが不可能な状況ではタグを使用して達成できるかどうかを知りたいと思います。

答えて

3

findViewWithTag(tag)は、デフォルトのタグがsetTag(tag)で設定されたビューをtag.equals(getTag())と比較して返します。

1

私は、ソースコード上で、それを指摘したいと思いDiegosの答えを補完するものとして:

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/view/View.java#18288

if (tag != null && tag.equals(mTag)) { 

ビューを比較し、見つけるために使用タグがで設定されているmTagです

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/view/View.java#18505

0123:このライン上のソースコードに見られるような直接法を用いての
0

方法View.getTag()またはView.findViewWithTag()のみ、特定のViewView.setTag()によって割り当てObject返すもdocumentationが表示されます。あなたはまた、if句に(v instanceof mySpecificView)のようないくつかの条件を追加することにより、Viewの特定のサブクラスに検索を絞り込むことができ

public View findViewWithTag(@NonNull View parent, int tagID, @NonNull Object myTag) 
{ 
    for (int i = 0; i < parent.getChildCount(); i++) 
    { 
     View v = parent.getChildAt(i); 
     if (myTag.equals(v.getTag(tagID))) 
     { 
      return v; 
     } 
    } 
    return null; 
} 

しかし、あなたはあなた自身のfindViewWithTag()メソッドを書くことができます。