2012-06-23 3 views
0

나는 안드로이드를 사용하여 프로그래밍 방식으로 동적으로 요소 (버튼 및 텍스트 뷰)를 추가하고 있습니다.동적 추가 요소의 setOnClickListener 범위

do 
{ 
    EditText txt1 = new EditText(this); 
    EditText txt2 = new EditText(this); 
    Button showtxt = new Button(this); 
    linearLayout.addView(showtxt); 
    linearLayout.addView(txt1); 
    linearLayout.addView(txt2); 
    showtxt.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      String aaa= txt1 .getText().toString();//HOW TO ACCESS txt1 and txt2 from here 
      String bbb= txt2 .getText().toString(); 
     } 
    } 
} 
while(somecondition) 

나는 안드로이드가 거의 새로운 오전 : 나는 또한 각 버튼의 setOnClickListener 이벤트를 설정하고 해당 이벤트에서 버튼 클릭에 일부 조치를 실행해야합니다. 클릭 콜백 함수에서 txt1 및 txt2에 어떻게 액세스합니까?

답변

1

당신은 클래스 넓은 범위가됩니다 정의하는 변수를 만들 필요가 :

public class Example extends Activity { 
    EditText txt1; 
    EditText txt2; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     txt1 = new EditText(this); 
     txt2 = new EditText(this); 
     ... 

지금 당신의 onclick 기능이 txt1txt2를 볼 수 있습니다.

는 또한

하나의 LinearLayout에 txt1txt2를 많이 만드는 것으로 나타 때문에, 당신은 그 EditTexts에 대한 참조하여 버튼을 전달할 수 있습니다

do { 
    ... 
    // EditText[] array = { txt1, txt2 }; 
    // is the short version of 
    EditText[] array = new EditText[2]; 
    array[0] = txt1; 
    array[1] = txt2; 

    showtxt.setTag(array); 
    showtxt.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      EditText[] array = (EditText[]) v.getTag(); 
      String aaa = array[0].getText().toString(); 
      String bbb = array[1].getText().toString(); 
      Log.v("Example", aaa + " " + bbb); 
     } 
    }); 
} while(some condition) 

이되지 않을 수 있습니다 이상적이지만 더 이상의 맥락없이 나는 당신의 궁극적 인 목표를 추측 할 수 없다. 희망이 도움이됩니다!

마지막 제안

우리는 버튼과 두 개의 EditTexts 행을 호출하는 경우는 각각 뷰 그룹에서 행 또는 자신의보기를 저장할 수 있습니다. 각 행에 대한 배경색을 갖고 싶다고 가정 해 보겠습니다.

View row = new View(this); // or this could be another LinearLayout 
row.setBackgroundColor(0x0000ff); 

// Create and add the Button and EditTexts to row, as in row.addView(showtxt), etc 
... 
linearLayout.addView(row); 

showtxt.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     View row = v.getParent() 
     String aaa = ((EditText) row.getChildAt(1)).getText().toString(); 
     String bbb = ((EditText) row.getChildAt(2)).getText().toString(); 
     Log.v("Example", aaa + " " + bbb); 
    } 
}); 
+0

목표는 간단합니다. 새 요소를 만들고 새 요소를 참조하여 click 이벤트를 추가하는 것입니다. 두 번째 솔루션이 마음에 들지만 첫 번째 솔루션이 효과가 있을까요? – albanx

+0

@albanx 답변을 업데이트했습니다. 첫번째 해결책은 모든 "행"에 대해 고유 한'txt1','txt2'를 요구합니다. 왜냐하면 루프를 사용하기 때문에 많은 변수가 필요할 것이기 때문입니다. 따라서 두 번째 또는 세 번째 옵션이 가장 좋습니다. 결국 원하는 결과에 따라 달라집니다. – Sam