更简单的方法来获取视图的Id(字符串)的Id(int)

我是新的Android和Java,所以很抱歉,如果这是一个太基本的问题,但我试图find一个解决方案在论坛和谷歌,我不能。

我在我的布局中有24个按钮,所有这些按钮做类似的东西,所以我想创建一个通用的function。 但首先我需要知道他的名字(XML ID)按钮。

这是按钮的XML代码:

我为所有按钮设置了android:onClick =“onClick”。

在我的活动中,我创建了一个新的函数onClick:

这个我试过的代码:

 public void onClick(View v) { String name = v.getContext().getString(v.getId()); String name2 = context.getString(v.getId()); String name3 = getString(v.getId()); String name4 = getResources().getString(v.getId()); } 

但是,当我尝试获取名称(在这种情况下“add_04”),我总是得到“false”。

最后,我find了一个解决方案,下面的代码:

 import java.lang.reflect.Field; String name5 = null; Field[] campos = R.id.class.getFields(); for(Field f:campos){ try{ if(v.getId()==f.getInt(null)){ name5 = f.getName(); break; } } catch(Exception e){ e.printStackTrace(); } } 

我的问题是如果没有一个更简单的方法来获得这个ID?

提前致谢。

这种做法是错误的开始。 如果你想把一段任意的数据(例如一个字符串)和一个视图关联起来,那就是tag的作用。 ID是数字,最好保持这种方式。

喜欢这个:

 /** * @return "[package]:id/[xml-id]" * where [package] is your package and [xml-id] is id of view * or "no-id" if there is no id */ public static String getId(View view) { if (view.getId() == 0xffffffff) return "no-id"; else return view.getResources().getResourceName(view.getId()); } 

我使用这个视图来构造更有意义的TAG

编辑:

你必须使用

getResources().getResourceEntryName(int resid);

如果您想检索与resId关联的条目名称

要么

您可以使用getIdentifier()来检索给定资源名称的资源标识符。

例如:

 int id = this.getResources().getIdentifier("yourtext", "string", this.getPackageName()); 

你可以检查每个按钮的ID这样的方式:

 public void onClick(View v) { switch (v.getId()) { case R.id.add_04: Toast.makeText(MainActivity.this, "1", Toast.LENGTH_LONG).show(); break; case R.id.add_05: Toast.makeText(MainActivity.this, "2", Toast.LENGTH_LONG).show(); break; } } 

你可以把这个toString()放到一个Android View里面,它会返回String资源ID。

 @Override public String toString() { Context context; Resources r = null; context = getContext(); if (context != null) { r = context.getResources(); } String entryName = null; if (r != null) entryName = r.getResourceEntryName(getId()); return entryName; } 

Kotlin版本(来自@gadget)视图扩展名:

 val View.stringId: String get() { return if (this.id == -0x1) "no-id" else this.resources.getResourceName(this.id) } 

尝试下面的方法来获取视图ID。

 @Override public String toString() { Context context; Resources r = null; context = getContext(); if (context != null) { r = context.getResources(); } String entryName = null; if (r != null) entryName = r.getResourceEntryName(getId()); return entryName; }