[android] キーはアプリケーション固有のリソースIDでなければなりません



3 Answers

あなたがsetTag(int、Object)を使用できないのは、アンドロイドが 'int'引数にあらかじめコンパイルされた一意のIDを必要とするからです。

String.xml xmlに2つの一意のエントリを作成して、 "firstname"& "secondname"&以下のように使用してみてください

imageView.setTag(R.string.firstname, "Abhishek");
imageView.setTag(R.string.lastname, "Gondalia");
Question

なぜこの例外を取得するのですか?

05-18 20:29:38.044: ERROR/AndroidRuntime(5453): java.lang.IllegalArgumentException: The key must be an application-specific resource id.
05-18 20:29:38.044: ERROR/AndroidRuntime(5453):     at android.view.View.setTag(View.java:7704)
05-18 20:29:38.044: ERROR/AndroidRuntime(5453):     at com.mypkg.viewP.inflateRow(viewP.java:518)

問題の行は次のとおりです。

((Button) row.findViewById(R.id.btnPickContact)).setTag(TAG_ONLINE_ID,objContact.onlineid);

私はそれを次のように定義しました:

private static final int TAG_ONLINE_ID = 1;



私はviewHolder.itemTitleTextView.getId()を使用しました。 しかし、あなたのリソースで宣言することもできます: <item type="id" name="conversation_thread_id"/>




これは私のために働く:

setTag(0xffffffff,objContact.onlineid);



これは仕事をします...

あなたのクラスにsetTagが1つだけあれば、上に宣言されたint、多分static finalを使うことができます。

この問題は、異なるキーを持つ2つ以上のsetTagがあるときに発生します。 というのは:

public static final int KEY_1 = 1;
public static final int KEY_2 = 2;
...
setTag(KEY_1)
setTag(KEY_2)
...

そのシナリオは間違っています。 次に、maybe ids.xmlと呼ばれる値ファイルを次のように追加する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="id" name="resourceDrawable" />
    <item type="id" name="imageURI" />
</resources>

次に、あなたのクラスで、

 ...
 setTag(R.id.resourceDrawable, KEY_1)
 setTag(R.id.imageURI, KEY_2)
 ...



Related