2012-06-23 66 views
0

我正在用android編程式地動態添加一些元素(按鈕和文本視圖)。我還需要設置setOnClickListener事件每個按鈕,並從該事件執行一些動作按鈕的點擊: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) 

我幾乎是新的到Android。如何在點擊回調函數中訪問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一排,你可以存儲在一個ViewGroup中的每一行或它自己的觀點。假設您想爲每一行分配背景顏色:

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