When scrolling, the values that I enter in the AutoCompleteTextView or to EditText fields are repeated when adding items-operations (adding an item from Activity) and scrolling down. That is, it looks like items are repeating, and in some. I tried to find the answer, but the solutions did not help the forums, no matter what I did with the viewHolder, viewInflate, I would change the place of initialization, the problem did not go away. Thank you all for your attention!
Below is my adapter OperationAdapter.java ---------------------------------
class OperationAdapter extends BaseAdapter { public ArrayList<Operation> operations; private Context context; private ArrayList<String> operationns = new ArrayList<>(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); public OperationAdapter(Context context, ArrayList<Operation> operations) { this.operations = operations; this.context = context; operationns.add("Maltcev"); operationns.add("Loskut"); } @Override public int getCount() { return operations.size(); } @Override public Object getItem(int position) { return operations.get(position); } @Override public long getItemId(int i) { return i; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { LayoutInflater lInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = lInflater.inflate(R.layout.operation_item, null); holder = new ViewHolder(); holder.timeEndOperation = (EditText) convertView.findViewById(R.id.timeEndOperation); holder.etc = (EditText) convertView.findViewById(R.id.etc); holder.deleteOperationBut = (Button) convertView.findViewById(R.id.deleteOperation); holder.saveOperationBut = (Button) convertView.findViewById(R.id.saveOperation); holder.startTimeBut = (Button) convertView.findViewById(R.id.startTimeBut); holder.finishTimeBut = (Button) convertView.findViewById(R.id.finishTimeBut); holder.timeBeginOperation = (EditText) convertView.findViewById(R.id.timeBeginningOperation); holder.operationsAutocomplete = (AutoCompleteTextView) convertView.findViewById(R.id.operationAutocomplete); convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } ArrayAdapter<String> adapterOperations = new ArrayAdapter<String>(context, R.layout.support_simple_spinner_dropdown_item, operationns); holder.operationsAutocomplete.setAdapter(adapterOperations); operations.get(position).timeOfStart = holder.timeBeginOperation.getText().toString(); operations.get(position).timeOfFinish = holder.timeEndOperation.getText().toString(); operations.get(position).etc = String.valueOf(position); operations.get(position).nameOfOperation = holder.operationsAutocomplete.getText().toString(); final ViewHolder viewHolderFinal = holder; holder.deleteOperationBut.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { viewHolderFinal.timeBeginOperation.clearComposingText(); viewHolderFinal.timeEndOperation.clearComposingText(); viewHolderFinal.etc.clearComposingText(); viewHolderFinal.operationsAutocomplete.clearComposingText(); operations.remove(position); notifyDataSetChanged(); } }); holder.startTimeBut.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String currentStartTime = sdf.format(new Date()); viewHolderFinal.timeBeginOperation.setText(currentStartTime); } }); holder.finishTimeBut.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String currentEndTime = sdf.format(new Date()); viewHolderFinal.timeEndOperation.setText(currentEndTime); } }); return convertView; } public void addNewOperationCard() { Operation operation = new Operation("", "", "", ""); operations.add(operation); } static class ViewHolder { public EditText timeBeginOperation; public EditText timeEndOperation; public EditText etc; public AutoCompleteTextView operationsAutocomplete; public Button deleteOperationBut; public Button saveOperationBut; public Button startTimeBut; public Button finishTimeBut; } } and a block of code from the Activity, where elements are added to the ListView:
final ListView operationListView = (ListView) findViewById(R.id.operationListView); final OperationAdapter operationAdapter = new OperationAdapter(this, operations); operationListView.setAdapter(operationAdapter); Button addOperationButton = (Button) findViewById(R.id.addOperationButton); addOperationButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { operationAdapter.addNewOperationCard(); operationAdapter.notifyDataSetChanged(); Toast.makeText(OperationAndWorkerActivity.this, operations.size() + " " + operationAdapter.operations.size(), Toast.LENGTH_LONG).show(); } });