2011-08-19 41 views
2

我的視圖上的文字代表一個id。所以點擊時,我想獲得對該資源的參考。以下不正確的代碼代表我正在嘗試執行的操作將「R.id.myID」從一個字符串轉換爲int值R.id.myID?

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.categories); 

    Bundle bundle = getIntent().getExtras(); 
    int myArrayID = bundle.getInt("category_id", 0); 
    String [] myArray = getResources().getStringArray(myArrayID); 

    setListAdapter(new CategoryAdapter(this, android.R.layout.simple_list_item_1, R.id.categoryText, myArray)); 
    ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
      String myIdString = (String) ((TextView) view.findViewById(R.id.categoryText)).getText(); 
      int myIdInt = // convert to the correct id that is represented by this string myIdString 
      Intent intent = new Intent(Categories.this, Categories.class); 
      intent.putExtra("category_id", myIdInt); 
      startActivity(intent); 
     } 
     }); 
} 

我明白爲什麼此方法不起作用。例如,視圖將會有文本「example1」,然後會有一個需要引用的R.id.example1值。很明顯,我接近這個錯誤的方式,並希望得到一些指導。

編輯 - 更多的代碼按要求。

編輯2-差的描述。所以我的活動是一個自定義列表。當單擊其中一個視圖時,該項目的標題將對應於我在strings.xml中的字符串數組。所以如果按下「example1」,將會有一個ID爲R.array.example1的字符串數組。我希望我的代碼能夠提取視圖的文本,並使用它來查找正確的字符串數組。然後這個字符串數組將被用來填充一個新的活動,用自定義列表項來排列數組中的項目

+0

您能否提供一個更完整的代碼示例來說明當前的情況。 – rabs

回答

11

我沒有得到你的代碼應該做什麼。但是爲了得到一個資源ID出來的資源名稱,請使用以下

getResources().getIdentifier(<resource name>, "id", getPackageName()) 

更多here

+0

對於我問的問題,這非常完美,謝謝。也會研究'標籤'屬性,它似乎更適合我的應用程序作爲一個整體 – Shane

0

存儲資源Id的最佳解決方案可能是使用TextView的Tag屬性(如果我理解正確地說,你的代碼中的TextView是自定義列表項的一部分,是否正確?)

+0

它是自定義列表項的一部分,並且Tag屬性聽起來很有希望。我會查找它,因爲我沒有此屬性的使用 – Shane

+0

只使用setTag和getTag。您可以在該屬性中存儲任何對象。我對你的建議是在你的activity onDestroy上將它設置爲null,這樣你就不會有內存泄漏。 – Muzikant