Eu tenho uma activity com uma listview onde eu fiz um adapter para preencher cada linha. Em cada linha desse listview eu tenho um codigo de produto e um spinner que escolho uma localização.
Quando eu escolho uma opção no spinner eu adiciono uma localização no produto e faço uma varredura na lista procurando produtos com o mesmo código, então atualizo a mesma localização neles. Eu automatizei esse processo pra facilitar pro usuário não precisar colocar manualmente a mesma localização em produtos iguais em todos os itens da lista, e esse processo já funciona.
O meu problema é que se eu tiver uma lista de 10 produtos com o mesmo código, o listview atualiza somente o último spinner. Como faço para preencher adequadamente os 10 itens?
Código do adapter que preencho o spinner:
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
final ReposicaoItem item = listaReposicao.get(position);
final LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.item_reposicao_produto,null);
spLocalizacao = view.findViewById(R.id.reposicao_sp_localizacao);
preencheSpinner();
preencherLocalizacao(item);
return view;
}
private void preencherLocalizacao(final ReposicaoItem item) {
spLocalizacao.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
String local = parent.getSelectedItem().toString();
int idLocal = parent.getSelectedItemPosition();
int idProduto = item.getId_produto();
int index = 0;
for (ReposicaoItem r: listaReposicao) {
if(idProduto==r.getId_produto()) {
listaReposicao.get(index).setLocalPresencial(local);
listaReposicao.get(index).setIndiceLocal(idLocal);
}
index++;
}
preencheSpinner();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
private void preencheSpinner() {
for (ReposicaoItem re: listaReposicao
) {
adapter = new ArrayAdapter<>(context,android.R.layout.simple_spinner_item,locaisPresencial);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spLocalizacao.setAdapter(adapter);
if(re.getLocalPresencial()!=null){
spLocalizacao.setSelection(re.getIndiceLocal());
}
}
}
}
}