Значение Edittext дублируется - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть listView объектов, каждый из которых содержит один EditText, я использовал код этой страницы .Моя проблема в том, что когда я что-то набираю в тексте редактирования или когда я добавляю что-то в listView, каждый из них получает одинаковое значение.

Это мой xml для объекта: `

<Button
    android:layout_margin="16dp"
    android:layout_width="56dp"
    android:layout_height="56dp"
    android:background="@drawable/button_normal"
    android:id="@+id/row_button"/>
<EditText
    android:layout_marginTop="16dp"
    android:layout_marginRight="16dp"
    android:layout_marginBottom="16dp"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:layout_toRightOf="@id/row_button"
    android:id="@+id/row_edittext"
    android:saveEnabled="false"
    android:hint="@string/NomDuJoueur"/>

`

Мой класс объектов такой же, как на веб-странице.

... и мой GetView из адаптера:

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

    if (convertView == null) {
        holder = new ViewHolder();
        //Log.wtf("New", "Holder");
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.row_player, null, true);

        holder.editText = convertView.findViewById(R.id.row_edittext);
        holder.button = convertView.findViewById(R.id.row_button);

        convertView.setTag(holder);
    }else {
        // the getTag returns the viewHolder object set as a tag to the view
        holder = (ViewHolder)convertView.getTag();
    }

    holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editModelArrayList.remove(position);
            notifyDataSetChanged();
        }
    });

    holder.editText.setText(editModelArrayList.get(position).getEditTextValue());

    holder.editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            try {
                editModelArrayList.get(position).setEditTextValue(holder.editText.getText().toString());
                //Log.wtf("AAAD", Integer.toString(holder.editText.getId()));
                //Log.wtf("HNCZ", Integer.toString(position)+holder.editText.getText());
            }catch (Exception e){

            }

        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });

    return convertView;
}

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

1 Ответ

0 голосов
/ 28 февраля 2019

Я подозреваю, что ваш TextChangedListener не имеет доступа к правильной позиции.Вот кое-что, что вы можете попробовать.

Добавьте переменную для хранения позиции везде, где определена ваша ViewHolder:

class ViewHolder{
    // Just add this after wherever you're defining your 'editText' and 'button' 
    // variables for your holder
    int position;
}

Затем внутри вашей getView() сохраните позицию после вашейдержатель настроен:

if(convertView == null){
    // your holder set up
}else{
    // your holder retrieval
}

// Store the position inside the holder
holder.position = position;

И используйте позицию от держателя внутри вашего onTextChanged():

try{
    editModelArrayList.get(holder.position).setEditTextValue(holder.editText.getText().toString());
}catch (Exception e){
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...