Android: как получить доступ к тексту внутри созданного EditText? - PullRequest
0 голосов
/ 03 марта 2011

Как получить доступ к созданным EditTexts в следующем коде? Я могу легко получить доступ к тексту из полей EditText, созданных в xml, но как мне захватить то, что введено в созданные поля EditText, найденные в моем цикле for?:

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;

    }
}

Ответы [ 4 ]

3 голосов
/ 03 марта 2011

Вам нужно хранить их где-то.

Лучшие в вашем классе:

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 голосов
/ 01 сентября 2014

Кроме того, вы не должны делать что-то вроде

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

в цикле. Это просто создает ненужные накладные расходы. Сделайте это ОДИН РАЗ прямо перед циклом.

0 голосов
/ 03 марта 2011

Помимо хранения массива или списка 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 можно преобразовать в гораздо более симпатичные вложенные циклы.

0 голосов
/ 03 марта 2011

Обратите внимание, что команда для захвата текста из EditText остается такой же из xml, как и в коде.

Здесь пробой с кодом является column.setId (i); устанавливает id для EditText в диапазоне от i = 1 до i = MatrixMultiply.h1 -1.

и в слушателе onClick вы находите sam EditText с помощью final EditText e1 = (EditText) findViewById (R.id.entry1); Не уверен, каково значение entry1. В идеале это должно быть что-то между i = 1 и i = MatrixMultiply.h1 -1.

...