怎样动态获取R.id.

zzxap 2013-01-31 03:37:09
String[] rowname=new String[] {"Id","LockType","HotelId","RoomId","UserId","CheckInTime","CheckOutTime"};
int[] rid=new int[rowname.length];
for(int i=0;i<rowname.length;i++)
{

rid[i]=R.id.rowname[i];

//一般 R.id.username 这样固定获取是没问题的,但是怎么动态获取。。
}
...全文
174 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzxap 2013-02-01
  • 打赏
  • 举报
回复
这样代码就可以生成了。一劳永逸
zzxap 2013-02-01
  • 打赏
  • 举报
回复
int resId = getResources().getIdentifier("list"+rowname[i], "id", "com.example.xxx); rid[i]=resId; 就这么简单
TobyC 2013-02-01
  • 打赏
  • 举报
回复
5楼说的对,要利用反射。参考代码:

private static Class<?> mId = null;
public static int id(Context c, String name) {
		if (mId == null) {
			try {
				mId = Class.forName(c.getPackageName() + ".R$id");
			}catch (ClassNotFoundException localClassNotFoundException) {
				localClassNotFoundException.printStackTrace();
				return -1;
			}
		}

		try {
			Field localField = mId.getField(name);
			int i = localField.getInt(name);
			return i;
		} catch (Exception localException) {
			localException.printStackTrace();
		}
		return -1;
	}
zzxap 2013-02-01
  • 打赏
  • 举报
回复
rid[i]=R.id.class.getField(rowname[i]+""); type mismatch: cannot convert from Field to int
pobi 2013-01-31
  • 打赏
  • 举报
回复
可以利用反射,根据提供的name取得id值 // 依据name取得Field对象 Field f = R.drawable.class.getField(name); // 取得int值 int resId = f.getInt(R.drawable.class) ; http://blog.csdn.net/tibib/article/details/7323022
xiami_9910 2013-01-31
  • 打赏
  • 举报
回复
换个思路: int[] rid=new int[]{R.id.Id,R.id.LockType,R.id.HotelId,……};
AnndyPeng 2013-01-31
  • 打赏
  • 举报
回复
R.id目前好像无法动态获取
zzxap 2013-01-31
  • 打赏
  • 举报
回复
如果这样能实现就节省不少时间了
山中客 2013-01-31
  • 打赏
  • 举报
回复
这个目前应该不能动态获取,还是一个一个来吧

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧