web-dev-qa-db-ja.com

Android:ImageView getID();整数を返します

40個のボタンのいずれかがいつ押されたかを判別するためにonTouchクラスを設定しました。

私が直面している問題はwhichボタンが押されたことを確認することです。

私が使用する場合:

int ID = iv.getId();

「widgetA1」ボタンをクリックすると

次のIDを受け取ります。

2131099684

文字列ID「widgetA1」を返したいのですが

from:game.xml

<ImageView Android:layout_margin="1dip" Android:id="@+id/widgetA1" Android:src="@drawable/image" Android:layout_width="wrap_content" Android:layout_height="wrap_content"></ImageView>

from:game.Java

public boolean onTouch(View v, MotionEvent event) {
  ImageView iv = (ImageView)v;
  int ID = iv.getId();
  String strID = new Integer(ID).toString();
  Log.d(TAG,strID);

  //.... etc

 }

+-+-+-+-+-+-

それ以外の場合は問題なく動作します。どのボタンを押しているかがわかります。私はこれにまったく慣れていませんAndroid Java。皆さんが私を助けてくれるかどうか教えてください。

17
rick

編集-TL; DR:

_View v; // handle to your view
String idString = v.getResources().getResourceEntryName(v.getId()); // widgetA1
_

元の:

投稿してからしばらく経ちましたが、同様の問題を扱っていたので、Android Viewクラスのソースコード)を見て解決策を見つけたと思います

ビューを印刷すると(暗黙的にtoString()を呼び出す)、印刷されるデータには、getId()から返される整数ではなく、レイアウトファイルで使用されるID文字列(必要なもの)が含まれていることに気付きました。したがって、ViewのtoString()のソースコードを見て、Androidがその情報を取得していたことを確認しましたが、実際にはそれほど複雑ではありません。次のように試してください。

_View v; // handle to your view
// -- get your View --
int id = v.getId();                       // get integer id of view
String idString = "no id";
if(id != View.NO_ID) {                    // make sure id is valid
    Resources res = v.getResources();     // get resources
    if(res != null)
        idString = res.getResourceEntryName(id); // get id string entry
}
// do whatever you want with the string. it will
// still be "no id" if something went wrong
Log.d("ID", idString);
_

ソースコード では、AndroidもgetResourcePackageName(id)getResourceTypeName(id)を使用して完全な文字列を作成します。

_String idString = res.getResourcePackageName(id) + ":" + res.getResourceTypeName(id)
    + "/" + res.getResourceEntryName(id);
_

これにより、_Android:id/widgetA1_の効果が得られます。

お役に立てば幸いです。

22
bodecker

あなたはそれを得ることができませんwidgetA1 string ...常に整数を取得します。しかし、その整数はそのコントロールに固有です。

これを確認するには、どのボタンが押されているかを確認します

int ID = iv.getId();
if(ID == R.id.widgetA1) // your R file will have all your id's in the literal form.
{

}
18
st0le

Xml

Android:tag="buttonA"

Src

Button.getTag().toString();
15
ojitos

もちろん、widgetA1を取得できます。次のようにするだけです。

ImageView iv = (ImageView)v;
int id = iv.getId();
String idStr = getResources().getResourceName(id);

それはあなたにyour.package.name:id/widgetA1を与えるでしょう、そしてその文字列であなたが望むことをしてください。

3
theJoe7

ビューIDに対応する整数値を取得します。クリックしているボタンを見つけるには、タグを使用することをお勧めします。レイアウトxmlファイルでタグを設定し、クリックしたアイテムを使用して比較できます。

<Button 
        Android:id="@+id/btnTest"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:text="Button"
        Android:tag="btntestTag"/>

これは使用例です。

2
java dev

実装では、ヒント属性を使用して、アクセス可能なボタン名を格納できます。たとえば、ボタンコード(.xmlファイル)では、次の行を使用します。

Android:hint="buttonName"

次に、onClicked関数(.Javaファイル)に次のように記述して、ヒントを取得します。

String hint = ((Button)v).getHint().toString(); //v is the view passed onClick
0
Aaron Gann

これで使えると思います試してみてください

 ImageView imgView = new ImageView(this);
String imgName = "img"//in your case widgetA1
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());
0
Angie