我從Catch The Cows下載了class,它類似於Google Map對象,或者至少這就是我正在使用的對象。以編程方式設置R.ID
它解析一個XML文件,其中列出了應該可觸摸的屏幕區域,然後使用此方法創建它們。 這是這裏的背景下,我已經註釋掉的代碼的某些部分,並加入我自己嘗試解決我的問題
private Area addShape(String shape, String name, String coords, String id) {
Log.v("IDS:", "id was "+id);
Area a = null;
String rid = id.replace("@+id/", "");
Log.v("IDS:", "rid was "+rid);
// Generate a new ID for the area.
int _id = 1;
View vi = findViewById(_id);
while (vi!=null) {
_id++;
vi = findViewById(_id);
}
//View.generateViewId(); //=0;
Log.v("IDS:", "After conversion final time "+_id);
/*
try {
Class<R.id> res = R.id.class;
Field field = res.getField(rid); // eg. rid = area10
_id = field.getInt(null);
Log.v("IDS:", "After conversion "+_id);
}
catch (Exception e) {
_id = 0;
Log.e("Exception ",e.getMessage());
} finally {
Log.v("IDS:", "After conversion final time "+_id);
}
*/
if (_id != 0) {
if (shape.equalsIgnoreCase("rect")) {
String[] v = coords.split(",");
if (v.length == 4) {
a = new RectArea(_id, name, Float.parseFloat(v[0]),
Float.parseFloat(v[1]),
Float.parseFloat(v[2]),
Float.parseFloat(v[3]));
}
}
if (shape.equalsIgnoreCase("circle")) {
String[] v = coords.split(",");
if (v.length == 3) {
a = new CircleArea(_id,name, Float.parseFloat(v[0]),
Float.parseFloat(v[1]),
Float.parseFloat(v[2])
);
}
}
if (shape.equalsIgnoreCase("poly")) {
a = new PolyArea(_id,name, coords);
}
if (a != null) {
addArea(a);
}
} else {
Log.v("Loading ID: ","_id was 0");
}
return a;
}
遺憾的是沒有被呈現在屏幕上,這是因爲_id = 0這應該與此位的代碼進行更改:
try {
Class<R.id> res = R.id.class;
Field field = res.getField(rid); // eg. rid = area10
_id = field.getInt(null);
}
如何過,我不知道它做什麼,試圖調試它,任何人都可以解釋一下這段代碼是幹什麼的?
嘛,個人,該代碼是如此格式不我覺得很難看,更別說搞清楚什麼是應該做的。請給我們一個正確格式化的機會。 – Simon
已經完成 - 我已經點擊塊評論,而不是意外的代碼部分。 –
在'Resources'類中,您有'getIdentifier()'方法,您可以通過它獲取''id''「名稱」:'getIdentifier(「id」,「area10」,context.getPackage())''。 – Luksprog