android - 通过 Id (int) 获取 View Id (string) 的更简单方法

标签 android

我是 android 和 java 新手,如果这是一个太基本的问题,很抱歉,但我试图在论坛和谷歌中找到解决方案,但我找不到。

我的布局中有 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"。

在我的 Activity 中,我创建了一个新函数 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());
}

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

关于android - 通过 Id (int) 获取 View Id (string) 的更简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14647810/

相关文章:

android - 封闭轨道的 Google Play 发布到生产

android - 我应该什么时候开始在 SurfaceView 上绘图?

android - "Can' t 获取第一个layout后的viewWidth”错误

android - 为 Android 创建开源项目

Android相机 Intent 返回空...有时

java - 来自 XML 的 MapView 的 Android InflateException

android webview 和 loadData,我可以获得后退按钮以返回到生成的内容吗?

android - 有了 Android 的新架构组件,savedInstanceState 重要吗?

java - 为什么这个 Android Volley 请求永远不会完成?

Android 视频播放但 VideoView 没有出现