2011-03-03 53 views
0

如何在下面的代码中访问创建的EditTexts?我可以很容易地访问从XML创建的EditText框的文本,但如何抓住什么是进入我发现for循环创建的EditText框?:Android:如何访问创建EditText文本?

public class Game extends Activity implements OnClickListener { 
    private static final String TAG = "Matrix"; 
    static int entry1; 
    static int entry2; 
    static int entry3; 
    static int entry4; 




@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.matrix); 
    View doneButton = findViewById(R.id.done_button); 
    doneButton.setOnClickListener(this); 

    for(int i = 0; i < MatrixMultiply.h1; i++){ 
     TableLayout table = (TableLayout)findViewById(R.id.myTableLayout); 
     TableRow row = new TableRow(this); 
     EditText column = new EditText(this); 
     for(int j = 0; j < MatrixMultiply.w1; j++){ 
      table = (TableLayout)findViewById(R.id.myTableLayout); 
      column = new EditText(this); 
      column.setId(i); 
      row.addView(column); 
     } 
     table.addView(row); 
    } 



} 

public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.done_button: 
     Intent k = new Intent(this, GameTwo.class); 

     final EditText e1 = (EditText) findViewById(R.id.entry1); 
     entry1 = Integer.parseInt(e1.getText().toString()); 

     final EditText e2 = (EditText) findViewById(R.id.entry2); 
     entry2 = Integer.parseInt(e2.getText().toString()); 

     final EditText e3 = (EditText) findViewById(R.id.entry3); 
     entry3 = Integer.parseInt(e3.getText().toString()); 

     final EditText e4 = (EditText) findViewById(R.id.entry4); 
     entry4 = Integer.parseInt(e4.getText().toString()); 

     startActivity(k); 
     //finish(); 
     break; 

    } 
} 
+2

你的问题是什么?您正在执行'e1.getText()。toString()',因此您正在访问EditText中的文本。 – EboMike

+0

我明白如何捕获我在xml中创建的EditText框中的文本,但是如何捕获在我的循环中创建的EditText框中的文本? – Biggsy

+0

您需要将它们存储在数组或某处。 – EboMike

回答

3

你需要将它们存储在什么地方。

顶你的类:

EditText[] columnEditTexts; 

在的onCreate:

columnEditTexts = new EditText[MatrixMultiply.w1]; 
for(int j = 0; j < MatrixMultiply.w1; j++){ 
     table = (TableLayout)findViewById(R.id.myTableLayout); 
     column = new EditText(this); 
     column.setId(i); 
     row.addView(column); 
     columnEditTexts[j] = column; 
    } 

而且读它...

for(int j = 0; j < MatrixMultiply.w1; j++){ 
    String value = columnEditTexts[j].getText().toString(); 

    // Do whatever you want to do with your value here 
} 
+0

那么我将如何捕获这些值? – Biggsy

+0

我不知道你的代码试图做什么。如果你只是想循环它,看看例子。 (编辑即将到来) – EboMike

0

请注意,命令捕获的EditText文本xml以及代码保持不变。

这里的代码概率是column.setId(i);将id设置为EditText,范围从i = 1到i = MatrixMultiply.h1 -1。

并在听者的onClick您通过使用 最终的EditText E1 =(的EditText)findViewById(R.id.entry1)找到SAM的EditText; 不确定entry1的值是多少。理想情况下,它应该介于i = 1到i = MatrixMultiply.h1 -1之间。

0

除了存储数组或EditTexts的列表之外,还可以为每个标签附加一个唯一标签。

for(int i = 0; i < MatrixMultiply.h1; i++){ 
     TableLayout table = (TableLayout)findViewById(R.id.myTableLayout); 
     TableRow row = new TableRow(this); 
     EditText column = new EditText(this); 
     for(int j = 0; j < MatrixMultiply.w1; j++){ 
      table = (TableLayout)findViewById(R.id.myTableLayout); 
      column = new EditText(this); 
      column.setId(i); 
      column.setTag(new Point(i, j)); 
      row.addView(column); 
     } 
     table.addView(row); 
    } 

再后来:

Point currentRowColumn = new Point(0, 0); 
int currentRow = 0; 
int currentColumn = 0; 
EditText currentEditText = findViewWithTag(currentRowColumn); 
while (currentEditText != null) { 
    while (currentEditText != null) { 
     String text = currentEditText.getText().toString(); 
     // Do stuff with the text here. 
     currentRowColumn.y += 1; 
     currentEditText = findViewWithTag(currentRowColumn); 
    } 
    // If we reach here, then findViewWithTag returned null, 
    // meaning we've finished the row. Move on to the next row. 
    currentRowColumn.x += 1; 
    currentRowColumn.y = 0; 
    currentEditText = findViewWithTag(currentRowColumn); 

} 

有一些丑陋的重复出现,我可能混淆列与行,示例也许误用android.graphics.Point(虽然标签可以是任何对象),但它基本显示了这个想法。如果您保存了列和行的数量,则可以将嵌套的while循环转换为更漂亮的嵌套for循环。

0

另外,你不应该在一个for循环做某事像

TableLayout table = (TableLayout)findViewById(R.id.myTableLayout); 

。这只会造成不必要的开销。在循环之前一次完成。