Link de exemplo: https://github.com/BrunoLeonardoDev/listview
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 produtos com o mesmo código de produto, o listview atualiza somente o último spinner.
Como faço para preencher adequadamente todos os itens?
Código completo do adapter que preencho o spinner:
package com.br.myapplication;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import java.util.List;
class ListaAdapter extends BaseAdapter {
private List<Opcoes> listaOpcoes;
private List<String> listaSpinner;
private Context context;
private ArrayAdapter<String> spAdapter;
private String selecionado;
private Spinner sp;
private boolean userTouch;
private int index;
private int idlocal;
public ListaAdapter(Context context, List<Opcoes> listaString, List<String> listaSpinner) {
this.context = context;
this.listaOpcoes = listaString;
this.listaSpinner = listaSpinner;
}
@Override
public int getCount() {
return listaOpcoes.size();
}
@Override
public Object getItem(int position) {
return listaOpcoes.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = LayoutInflater.from(context).inflate(R.layout.item_lista, parent, false);
TextView txt = view.findViewById(R.id.textView);
final Opcoes opcao = listaOpcoes.get(position);
txt.setText(opcao.getTexto());
sp = view.findViewById(R.id.spinner);
spAdapter = new ArrayAdapter<>(context,android.R.layout.simple_spinner_item,listaSpinner);
spAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp.setAdapter(spAdapter);
userTouch = false;
sp.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
userTouch = true;
return false;
}
});
sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
int index = 0;
String selecao = parent.getItemAtPosition(position).toString();
if(userTouch) {
for (Opcoes r: listaOpcoes
) {
r.setTextoSpinner(selecao);
Log.d("Spinner",String.valueOf(r.getTextoSpinner()));
index++;
}
userTouch = false;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
return view;
}
}