2013-07-30 82 views
0

我從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); 
      } 

如何過,我不知道它做什麼,試圖調試它,任何人都可以解釋一下這段代碼是幹什麼的?

+0

嘛,個人,該代碼是如此格式不我覺得很難看,更別說搞清楚什麼是應該做的。請給我們一個正確格式化的機會。 – Simon

+0

已經完成 - 我已經點擊塊評論,而不是意外的代碼部分。 –

+0

在'Resources'類中,您有'getIdentifier()'方法,您可以通過它獲取''id''「名稱」:'getIdentifier(「id」,「area10」,context.getPackage())''。 – Luksprog

回答

1

R是一個只讀類。它是在編譯時生成的,您不應該使用反射來修改其字段。你也應該避免反射來訪問字段值。你應該使用官方的API。

在類的第一行註釋是

/* AUTO-GENERATED FILE. DO NOT MODIFY. */ 
+0

這是我下載的類中的代碼,它不起作用。我試圖解決的是實際上正在做的事情,以便我可以重做它。 –

+0

你想要達到什麼 – Blackbelt

+0

作爲下面的答案 - 格式化 –