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。皆さんが私を助けてくれるかどうか教えてください。
編集-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
_の効果が得られます。
お役に立てば幸いです。
あなたはそれを得ることができませんwidgetA1
string ...常に整数を取得します。しかし、その整数はそのコントロールに固有です。
これを確認するには、どのボタンが押されているかを確認します
int ID = iv.getId();
if(ID == R.id.widgetA1) // your R file will have all your id's in the literal form.
{
}
Xml
Android:tag="buttonA"
Src
Button.getTag().toString();
もちろん、widgetA1
を取得できます。次のようにするだけです。
ImageView iv = (ImageView)v;
int id = iv.getId();
String idStr = getResources().getResourceName(id);
それはあなたにyour.package.name:id/widgetA1
を与えるでしょう、そしてその文字列であなたが望むことをしてください。
ビューIDに対応する整数値を取得します。クリックしているボタンを見つけるには、タグを使用することをお勧めします。レイアウトxmlファイルでタグを設定し、クリックしたアイテムを使用して比較できます。
<Button
Android:id="@+id/btnTest"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Button"
Android:tag="btntestTag"/>
これは使用例です。
実装では、ヒント属性を使用して、アクセス可能なボタン名を格納できます。たとえば、ボタンコード(.xmlファイル)では、次の行を使用します。
Android:hint="buttonName"
次に、onClicked関数(.Javaファイル)に次のように記述して、ヒントを取得します。
String hint = ((Button)v).getHint().toString(); //v is the view passed onClick
これで使えると思います試してみてください
ImageView imgView = new ImageView(this);
String imgName = "img"//in your case widgetA1
int id = getResources().getIdentifier(imgName, "drawable", getPackageName());