Как получить значение EditText в другом представлении - PullRequest
1 голос
/ 11 марта 2019

Мне нужно сделать n правок в соответствии со строками данных в базе данных.Я добавил их в LinearLayout как:

for(Some Condition)
{
    EditText et = new EditText (this);
    et.setValue(SomeVal);
   li.addView(et);
}

И затем я добавил LinearLayout в ScrollView, который я использую как представление в AlertDialog.

Нужно ли мне назначать идентификатор длякаждый EditText, и как я могу позже получить доступ к значениям каждого EditText.

Ответы [ 6 ]

1 голос
/ 11 марта 2019

Я люблю заниматься этим с другой стороны.

Возьмите LinearLayout и ищите детей по очереди.

Например:

      String a;
      for (int i = 0; i< linearLayout.getChildCount(); i++){
          a = ((EditText) linearLayout.getChildAt(i)).getText().toString();
          Log.i("go", "TextView text is:" + a);
      }

Inв вашем случае измените linearLayout на li.

0 голосов
/ 11 марта 2019

Попробуйте это

Добавить текст динамического редактирования: -

EditText et;
List<EditText> edtList = new ArrayList<EditText>();

LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
        // add edittext
        for (int j = 1; j <= n; j++) {
            et = new EditText(this);
            edtList.add(et);
            LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            et.setLayoutParams(p);
            et.setText("Text");
            et.setId(j);
            ll.addView(et);
        }

Получить Редактировать текст: -

int id[]=new int[edtList.size()];
for(int i=0; i < edtList.size(); i++){
    id[i] = edtList.get(i).getId();
}

Надеюсь, это тебе поможет!

Спасибо.

0 голосов
/ 11 марта 2019

Если у вас есть ссылочная переменная LinearLayout, в которую вы добавляете значения, вы можете получить все ее дочерние представления и получить доступ к их данным, используя приведенный ниже код. Вам не нужно назначать идентификаторы для EditText при их добавлении.

for (int i = 0; i < ll_main.getChildCount(); i++) {
    EditText child = (EditText)ll_main.getChildAt(i);
    child.getText(); 
}

Убедитесь, что в вашем макете есть только EditTexts, иначе вам нужно будет проверить объект перед приведением к EditText.

0 голосов
/ 11 марта 2019

Если вы хотите придерживаться этого способа, вы можете создать HashMap

HashMap<Integer/*EditText Id*/,EditText> myEditTexts = new HashMap<>();

Тогда в вашем коде

for(Some Condition)
{
    EditText et = new EditText(this);
    et.setValue(SomeVal);
    /*Add This*/
    myEditTexts.put(intId,et);
    li.addView(et);
}

Тогда вы можете назвать это

myEditTexts.get(Id);

ИЛИ вы можете использовать RecyclerView с EditTexts и достичь его по позиции (если вы не знаете, как, вы можете спросить меня, если вы хотели эту опцию)

0 голосов
/ 11 марта 2019

Чтобы получить доступ к этим Edittexts позже, добавьте их в некоторую коллекцию и затем получите доступ через позицию:

Arraylist<EditText> edittexts = new Arraylist()

for(Some Condition) {
     EditText et = new EditText (this);
     et.setValue(SomeVal);
     li.addView(et);
     edittexts.add(et);
}
0 голосов
/ 11 марта 2019

Не создавайте подобные просмотры. Используйте пользовательский адаптер и ListView или RecyclerView: https://www.journaldev.com/10416/android-listview-with-custom-adapter-example-tutorial

Вы сможете ссылаться на каждый элемент по его позиции в резервном массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...