2011-03-08 9 views
0

for 루프를 사용하여 프로그래밍 방식으로 TextViews를 추가하고 setId (Int int)를 사용하여 특정 텍스트 뷰의 고유 ID를 설정합니다. 하지만 이제 id를 기반으로 textView를 검색하고 싶습니다. 어떻게 검색합니까?검색 프로그래밍 방식으로 작성된 Textview

erorr occurd 'app stopped unexpectedly ...'여기 내 코드가 있습니다. 또 다른 옵션이 있습니다

public class Idtest extends Activity { 
    TextView tv; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     LinearLayout ll=new LinearLayout(this); 
     tv=new TextView(this); 

     tv.setText("Hello"); 
     ll.addView(tv); 

     tv=new TextView(this); 
     tv=(TextView)ll.getChildAt(1); 

     setContentView(tv); 


    } 
} 

답변

2

tv 마지막에 분명히 null입니다합니다 (LinearLayout는 인덱스 0에 하나 아이를 가지고), 그래서 당신은 기본적으로 예외가 발생 setContentView(null)를 호출하고 있습니다. 당신이하려는 일 (코드가 엉망입니다)이 나에게 분명하지 않습니다. 당신이 LinearLayout에서 여러에게 TextView의를 보여주기 위해 노력하고있다 치죠

, 여기 내 제안이다 :

public class Idtest extends Activity { 
    LinearLayout mainLayout; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mainLayout = new LinearLayout(this); 
     setContentView(mainLayout); 

     for (int i=0; i < 10; i++) { 
      TextView tv = new TextView(this); 
      tv.setText("Hello " + i); 
      mainLayout.addView(tv); 
     } 
    } 
} 

이후 시점에서, 당신은 수행 TextView들 중 하나가 필요하다면 :

TextView tvX = mainLayout.getChildAt(X); // where X is between 0 and 9 

또한 코드에서 레이아웃을 만드는 것이 바람직하지 않습니다. 당신이 그것을 피할 수 있다면, 제발. 예를 들어, TextView의 수가 동적 인 경우 코드를 사용하여 코드를 생성하는 것이 정상입니다 (코드를 부 풀릴 수는 있지만). 그러나 코드에서 LinearLayout을 만드는 것은 바람직하지 않습니다. XML로 작성해야합니다. XML에 TextView을 가질 수도 있다면 더 좋을 것입니다.

+0

고마워, 코드. 하지만 perticular 텍스트 상자를 가져올 수는 없지만. 강제로 앱을 종료했습니다. TextView tvX = (TextView) mainLayout.getChildAt (2); setContentView (tvX); 나는이 두 줄을 썼다. – Nirav

+0

왜 당신은'setContentView (tvX)'를합니까? 그것은 의미가 없습니다, 당신이 더 잘하려고 노력하고있는 것을 설명하십시오. – Felix

+0

나는 가져온 화면에서 TextView를보고있다. Selected TextView가 correnct인지 확인하려면. – Nirav

1

도 ... 우리는 setTag()getTag() 방법이있다. textview를 추가하는 동안 태그를주고 검색을 원할 때마다 getTag()를 사용하십시오.

+0

인자로서 setTag()에서 무엇을 전달해야합니까? – Nirav

+0

어떤 객체, 말하자면 ... 이름 textview에 대해 u는 nameTV.setTag ("name"); – Mathew

+0

좋아요 ... 고마워요. – Nirav

1

일부 ViewGroup (예 : LInearLayout)에 TextView 컨트롤을 추가한다고 가정 해 보겠습니다.

getChildCount()/getChildAt (index)를 사용하여 ViewGroup 하위 뷰를 반복하고 하위 뷰 ID를 검색중인 뷰와 비교할 수 있습니다.

+0

내 질문을 업데이트했습니다 ... 내 코드를 확인하고 문제가 무엇인지 말해 주시겠습니까? – Nirav

관련 문제