2014-12-16 4 views
0

나는 안드로이드에서 작업 중입니다.문자열이있는 findViewById를 사용합니다.

내 응용 프로그램에는 TextViews를 추가 할 수있는 옵션이 있습니다.

내가의 ID로 최대 5 TextViews 수 있습니다 - 등 번호 1, 번호 2, 번호 3을 ..

나는 main_activity.xml와 자원 파일와 나머지 직접 최초의 ID를 설정하고

나는 현재 textviews 수를 가지고 있습니다.

나는 현재 수의 textviews 만 사용하여 textview에 액세스하는 좋은 방법을 찾고 있습니다.

대신

switch (TextViewNumber) { 
    case 2: 
     findViewById(R.id.Number2); 
     break; 
    case 3: 
     findViewById(R.id.Number3); 
     break; 
    case 4: 
     findViewById(R.id.Number4); 
     break; 

    } 

을하는 I는 무엇을 의미

, 나는 더 나은 성능의 방법을 몇 가지 일반적인에 TextViews (TextViewNumber)의 수를 사용하고 싶습니다. .

TextVie를 설정할 때 동일한 문제가 있습니다. WS : 뷰를 이동 핸들들의

switch (TextViewNumber) { 
    case 2: 
     newTextView.setId(R.id.IngredientNumber2); 
     break; 
    case 3: 
     newTextView.setId(R.id.IngredientNumber3); 
     break; 
    case 4: 
     newTextView.setId(R.id.IngredientNumber4); 
     break; 

    } 

더 클래스 :

public class LayoutOrganizer { 

    public static RelativeLayout.LayoutParams getRelativeLayoutParams(int TExtViewCount, TextView textView) { 
     RelativeLayout.LayoutParams myLayoutParams = new RelativeLayout.LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

      myLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

      // this is where I need to access the view ID 
      myLayoutParams.addRule(RelativeLayout.BELOW, ViewID); 

     return myLayoutParams; 
    } 
} 

TextViewNumber를 사용하는 더 나은 방법에 대한 어떤 아이디어? 당신은 다음을 시도해 볼 수 있습니다

+1

parent.getChildAt(textViewIndex);를 사용 viewIndex에 의해

private ArrayList<TextView> textviews = new ArrayList<TextView>(textViewCount); @Override protected void onCreate(Bundle savedInstanceState) { textViews.add(findViewById(R.id.Number1)); textViews.add(findViewById(R.id.Number2)); ... // Then access them using a number Textview textView2 = textViews.get(1); } 

들이 부모 뷰의 모든 형제 자매 있습니다 또는 경우에 당신이 그들을 액세스 할 수있는'INT 아이디 =의 getResource(). getIdentifier ("IngredientNumber"+ TextViewNumber, "ID", getPackageName()); ' – Blackbelt

답변

1

:

TextView textView = this.findViewById(this.getResources().getIdentifier("Number" + TextViewNumber, "id", this.getPackageName())); 

Resources#getIdentifier(String, String, String) 잘못된 ID 인 0을 반환 할 수 있음을 유의하십시오.

+0

답변 해 주셔서 감사합니다! 그것은 MainActivity에서 잘 작동합니다. 것은 내가 textivew를 추가 할 때 몇 가지 뷰를 움직이는 정적 메서드를 가진 클래스를 가진다는 것이다. 메서드에서 나는 그들의 ID의 위트 뷰 재치 reffering 오전, 그리고이 클래스는 MainActivity 이외의 클래스에서 사용할 수 없습니다. 정적 메서드와 함께 내 질문을 편집했습니다 –

+0

그것은 정적 메서드에서 무엇을하려고하는지에 따라 다릅니다. 'TextViewCount' 또는'textView'를 사용하고 있지 않습니다. 정적 메서드를 호출하기 전에 위 코드를 수행하거나'Context' 인수를 추가하여'getResources()'에 액세스 할 수 있습니다. –

+0

그래, 어쨌든 내 원래의 질문에 대한 당신의 대답은 훌륭 했어. –

0

onCreate의 배열에 모두 넣을 수 있습니다. 그들이