通过 Id (int) 获取视图 Id (string) 的更简单方法

2024-01-11

我的布局中有 24 个按钮,所有这些按钮都执行类似的操作,因此我想创建一个通用功能。但首先我需要知道按钮的名称(xml id)。

这是按钮的 XML 代码:

  <Button
      android:id="@+id/add_04"
      android:layout_width="42dp"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:layout_marginLeft="15dp"
      android:background="@xml/zbuttonshape"
      android:onClick="onClick"
      android:text="@string/mas" />

我为所有按钮设置 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”。

最后我找到了一个解决方案,代码如下:

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?


像这样:

/**
 * @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() == View.NO_ID) return "no-id";
    else return view.getResources().getResourceName(view.getId());
}

我在视图构造函数中使用它来制作更有意义的标签

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Id (int) 获取视图 Id (string) 的更简单方法 的相关文章