Android; Получить текст из адаптера текстового поля Dynami c - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть динамический c адаптер, который заполняет представление списка текстовыми представлениями со значениями, считанными из файла JSON, вот пример (https://imgur.com/a/w9CHzxX). Теперь мне нужно собрать пользовательский ввод из этих полей и использовать его в более поздней части моего приложения, но мой вопрос таков. когда я создаю текстовые представления, как они все имеют одинаковый идентификатор, верно? Так как же я могу собрать пользовательский ввод, скажем, второго текстового представления?

Адаптер

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;

        if (convertView == null) {if (convertView == null) {

            holder = new ViewHolder();

            LayoutInflater inflater = (LayoutInflater)
                    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.layout_question_textfield, null, true);
--->        holder.editText = (AutoCompleteTextView) convertView.findViewById(R.id.edt);
--->        holder.editTitel = (Button) convertView.findViewById(R.id.btn);

            convertView.setTag(holder);
        }
        else {...}

        holder.editText.setHint(HintArrayList.get(position).getEditTextValue());

1 Ответ

0 голосов
/ 01 апреля 2020

ID является атрибутом представления, что область действия этого атрибута ограничена раздутой группой представления, которая включает это представление.

, например, если у нас есть этот xml файл (item_view. xml) :

<LinearLayout
      ...>
      <TextView
          ...
          android:id="@+id/textView_itemVew"/>
</LinearLayout>

и затем мы раздуваем этот файл несколько раз (возможно, в классе адаптера), как показано ниже:

View item1 = inflater.inflate(R.layout.item_view, null,true);
View item2 = inflater.inflate(R.layout.item_view, null,true);
View item3 = inflater.inflate(R.layout.item_view, null,true);

теперь мы можем получить доступ к представлению TextView по его идентификатору, но мы должны используйте группу представлений этого TextView, чтобы найти его.

//Id's are the same but view groups no!
TextView editText_of_item1 = item1.findViewById(R.id.editText_itemVew);.
TextView editText_of_item2 = item2.findViewById(R.id.editText_itemVew);
TextView editText_of_item3 = item3.findViewById(R.id.editText_itemVew);

.

.

.

, в вашем случае вы можете добавить каждый EditText к список для доступа к нему после того, как весь список раздули ... как это:

List<EditText> editTextList = new ArrayList<>();

public View getView(int position,View view,ViewGroup parent) {  
    LayoutInflater inflater=context.getLayoutInflater();  
    View itemView = inflater.inflate(R.layout.item_view, null,true);  

    EditText itemEditText = (EditText) itemView.findViewById(R.id.editText);

    editTextList.add(itemEditText);

    return itemView;  
};  

есть полезный пример на javaTpoint веб-сайте для вас.

...