2011-08-19 3 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를 사용하십시오. 해당 자산에 오브젝트를 저장할 수 있습니다. 내 조언은 당신의 활동 onDestroy에서 null로 설정하여 메모리 누수가 발생하지 않도록하는 것입니다. – Muzikant

관련 문제